0. 패키지 불러오기

텍스트 마이닝 프로젝트를 진행하기 전 기본적으로 불러와야 하는 패키지를 불러온다.
주석에 어떤 경우에 사용하는 패키지인지 기재하였다.
library(readr) # SentiWord_Dict.txt을 불러오는 패키지
library(readxl) # 엑셀 파일을 불러오는 패키지
library(dplyr) # 데이터 처리시 유용한 패키지
## 
## 다음의 패키지를 부착합니다: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stringr) # 전처리시 사용하는 패키지
library(textclean) #전처리(HTML 특수 문자 제거)시 사용하는 패키지
library(tidytext) # 명사, beta, gamma 추출시 사용하는 패키지
library(KoNLP) # 명사 추출시 사용하는 패키지
## Checking user defined dictionary!
library(scales) # 그래프 축 맞출 때 사용되는 패키지
## 
## 다음의 패키지를 부착합니다: 'scales'
## The following object is masked from 'package:readr':
## 
##     col_factor
library(ggplot2) # 그래프 그릴 때 사용되는 패키지
library(tidyr) #로그오즈비를 구할 때 사용되는 패키지
library(ldatuning) # 최적 lda 모델을 찾을 때 사용하는 패키지
library(tidylo) # 가중 로그 오즈비를 구하는 패키지
library(ggwordcloud) # 워드 클라우드 그리는 패키지
library(showtext)  # 외부 글꼴 추가 패키지
## 필요한 패키지를 로딩중입니다: sysfonts
## 필요한 패키지를 로딩중입니다: showtextdb
library(gridExtra) # 워드클라우드 동시에 불러오는 패키지
## 
## 다음의 패키지를 부착합니다: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
font_add_google(name = "Black Han Sans", family = "blackhansans") # '검은고딕' 폰트 적용
showtext_auto()

1. 배달의 민족을 읽어 들여 텍스트 분석을 위한 전처리 하는 과정을 보이고 설명하시오. (10)

주석에 상세 설명이 달려 있다.
# 데이터 불러오기
DF <- read_excel("배달의 민족.xlsx") %>% 
  mutate(id = row_number()) # document를 편하게 구분하기 위해 id번호를 생성.

# 데이터 간단 탐색
head(DF,10)
## # A tibble: 10 x 4
##    날짜                닉네임                  리뷰내용                       id
##    <dttm>              <chr>                   <chr>                       <int>
##  1 2020-04-10 00:00:00 최세헌                  업데이트 이후 쿠폰들에 최~      1
##  2 2020-04-10 00:00:00 GET INSPIRED BY THE ART 별이 마이너스는 없어서 1개~     2
##  3 2020-04-10 00:00:00 lee clean water         배민 2-3년동안 잘 썼는데 4~     3
##  4 2020-04-10 00:00:00 정호진                  대형 가게든 소형 가게든 깃~     4
##  5 2020-04-10 00:00:00 류상현                  울산대서 장사하고 있는 개~      5
##  6 2020-04-10 00:00:00 최윤빈                  해도해도 수수료 너무챙겨가~     6
##  7 2020-04-10 00:00:00 김경민                  지금처럼 전국적으로 어려워~     7
##  8 2020-04-10 00:00:00 김재민                  수수료정책이 나쁜회사입니~      8
##  9 2020-04-10 00:00:00 Jee -                   그동안 잘먹었어요. 뭘 그렇~     9
## 10 2020-04-10 00:00:00 송승환                  아니 고객센터 뭐하세요? 인~    10
glimpse(DF)
## Rows: 2,159
## Columns: 4
## $ 날짜     <dttm> 2020-04-10, 2020-04-10, 2020-04-10, 2020-04-10, 2020-04-10, 20~
## $ 닉네임   <chr> "최세헌", "GET INSPIRED BY THE ART", "lee clean water", "정호진"~
## $ 리뷰내용 <chr> "업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고요 서비스하~
## $ id       <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18~

1) 기본적인 전처리를 진행한다.

중복되거나 (현재는 중복 리뷰 없음.) 짧은 리뷰을 없애준다.
문제에 제시된 것처럼 단어의 길이가 적어도 2 이상인 것만 추출한다. Topic modeling은 짧은 문서는 적합하지 않다.
baemin <- DF %>%
  mutate(reply = str_replace_all(리뷰내용, "[^가-힣]", " "),
         reply = str_squish(reply)) %>%  # 닉네임별로 중복되는 리뷰이 없으니 따로 중복 리뷰 제거할 필요 없음
  filter(str_count(reply, pattern=boundary(type= "word")) >= 2)  # 짧은 문서 제거 :  단어의 길이가 적어도 2 이상인 것만 추출 (Topic modeling은 짧은 문서는 적합하지 않음. 문제에서도 최소 글자수 2로 제한됨.)

2) 토근화를 진행하여 명사를 추출한다.

토큰화 단위는 extractNoun (형태소 분석된 명사 형태) 이다.
최소 2번 이상 나오는 나오는 것만 사용한다.
# 명사 추출 (토큰화) : 리뷰 (원문)내 중복 단어를 제거하지 않음.
comment <- baemin %>%
  unnest_tokens(input = reply, 
                output = word,
                token = extractNoun,
                drop = F) %>% 
  filter(str_count(word) > 1) # 두 글자 이상 추출

comment<-comment %>%
  select(id, word) %>% print()
## # A tibble: 20,819 x 2
##       id word    
##    <int> <chr>   
##  1     1 업데이트
##  2     1 이후    
##  3     1 쿠폰    
##  4     1 최저    
##  5     1 요금    
##  6     1 불편    
##  7     1 하고    
##  8     1 서비스  
##  9     1 영업    
## 10     1 꼼수    
## # ... with 20,809 more rows

3) 리뷰의 주제어, 즉 모든 리뷰에 빈도 높은 단어 제거한다.

여기서는 “배민”, “배달의민족”이다. 제거해준다.
# 리뷰의 주제어 "배민" "배달의민족" 삭제
count_word <- comment %>%
  add_count(word, sort=TRUE) %>% # mutate성의 개별 결과 제공
  filter(!word %in% c("배민","배달의민족")) %>% print() 
## # A tibble: 20,402 x 3
##       id word      n
##    <int> <chr> <int>
##  1     4 배달    573
##  2     7 배달    573
##  3    43 배달    573
##  4    45 배달    573
##  5    49 배달    573
##  6    50 배달    573
##  7    56 배달    573
##  8    56 배달    573
##  9    56 배달    573
## 10    60 배달    573
## # ... with 20,392 more rows
그런데 고객이 “배달의 민족” 이라고 리뷰에 기재한 경우에는 명사 단위로 추출된 상황이기 때문에 “배달”과 “민족” 의 단어로 구분된다.
이 경우 “배달” 혹은 “민족” 역시 제거해야 할까?
# "배달" 이 전체 리뷰에 몇번 들어갔는지 확인하기
count_word %>% 
  count(word) %>% 
  filter(word=="배달")
## # A tibble: 1 x 2
##   word      n
##   <chr> <int>
## 1 배달    573
# "민족" 이 전체 리뷰에 몇번 들어갔는지 확인하기
count_word %>% 
  count(word) %>% 
  filter(word=="민족")
## # A tibble: 1 x 2
##   word      n
##   <chr> <int>
## 1 민족     54
“배달” 이라는 단어는 꼭 “배달의 민족” 이라는 문장에서만 사용되는 단어가 아니다.
“배달 서비스”, “배달 라이더” 등 다양한 경우에 사용된다.
반면, 민족은 해당 원문에서는 “배달의 민족” 외에 다른 문장에 비교적사용될 가능성이 적다.

따라서 해당 두 단어를 삭제해야하는지 판단하기 위해 “배달”과 “민족” 각 몇번씩 사용되었는지를 확인하였다.
확인 결과 “배달”이라는 단어는 500번 이상 (573번) 사용되었지만 “민족”은 50번 정도 (54번) 만 사용된 것으로 확인되었다.
즉, “배달” 과 “민족” 이 항상 상호명으로 같이 쓰이는 것은 아니라는 것이 확인되었다.
또한, “배반의 민족”, “배달의 게르만족” 등 “배달의 민족” 이라는 상호가 변형되서 쓰이는 경우도 많은 것으로 확인되었다.

따라서 “배달”과 “민족”은 제거하지 않았으며, “배민”과 “배달의민족”만 제거하였다.

4) 불용어 및 유의어 처리

stopword (불용어) 처리를 위해 View 함수 사용해서 많이 등장한 (기준: n) 상위 200개의 단어를 확인하였다.
상위 200개의 단어들 중 stopword 를 찾아 제거하였다.

유의어로는 업뎃" = “업데이트”, “독점” = “독과점”을 확인하였다.
“독점”과 “독과점”은 사전에 정의된 정확한 뜻은 다르지만, 원문에서는 유사한 의미로 쓰이므로 “독점”을 “독과점”으로 수정하였다.
count_word %>%
  count(word, sort=TRUE) %>% View() # stopword 처리를 위해 View 함수 사용

# stopword 제거 (기준 : 상위 200개 단어)
stopword <- c("들이", "하다", "하게", "하면", "해서", "이번", "하네",
              "해요", "이것", "니들", "하기", "하지", "한거", "해주",
              "그것", "어디", "여기", "까지", "이거", "하신", "만큼",
              "진짜", "하려", "하시","하라", "한거", "해도", "그거", "그걸")

count_word <- count_word %>%
  filter(!word %in% stopword) %>%
  # 유의어 처리
  mutate(word = dplyr::recode(word,
                              "업뎃" = "업데이트",
                              "독점" = "독과점")) # 해당 원문에서는 독점과 독과점이 거의 유사한 뜻으로 사용됨

5) 이외의 데이터 처리 (혹은 전처리) 는 분석 기법에 맞게 진행해야 한다.

따라서, 각 문제를 확인한 후, 프로젝트를 전개하며 진행해준다.

2. 전체 리뷰들에 대한 워드클라우드를 그리고 설명을 하시오. (10)

워드클라우드란?
: 핵심단어를 시각화하는 기법이다. 즉, 키워드, 개념 등을 직관적으로 파악할 수 있도록 많이 언급된 핵심 단어를 시각적으로 돋보이게 하는 기법이다.
해당 프로젝트에서 표현된 워드 클라우드는 해당 단어가 등장한 수를 (빈도, n) 기준으로 하여 워드 클라우드를 이루는 텍스트의 크기를 구분하였다.
가장 크기가 큰 단어는 가장 많이 사용된 단어이다.
최소 30번 이상 사용된 단어로만 구성되어 있다.
또한, 빈도에 따라 글자색도 다르게 표현하였다.
# 단어별 사용 빈도 (add_count에서 반복 제거해준 것)
word_cloud <-count_word %>% 
  count(word, sort=T) %>% print()
## # A tibble: 5,185 x 2
##    word         n
##    <chr>    <int>
##  1 배달       573
##  2 주문       527
##  3 수수료     305
##  4 사용       252
##  5 리뷰       221
##  6 삭제       211
##  7 업데이트   211
##  8 쿠폰       211
##  9 어플       204
## 10 결제       181
## # ... with 5,175 more rows
# 워드 클라우드 그리기
word_cloud %>% 
  ggplot(aes(label = word, size = n, 
             color = factor(sample.int(n=10, 
                                       size=nrow(word_cloud), replace = TRUE)))) + # 색깔 지정
  geom_text_wordcloud(seed = 1234, family = "blackhansans") + # 폰트 적용
  scale_radius(limits = c(30, NA), # 최소, 최대 단어 빈도 (최소 30번 이상 나온 단어들이 나온다.)
               range = c(8, 60))+  # 최소, 최대 글자 크기
  labs(title = "전체 리뷰의 Word Cloud") +
  theme(plot.title = element_text(size = 50, face = "bold"))+
  theme_minimal() 
## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

## Warning in grid.Call.graphics(C_text, as.graphicsAnnot(x$label), x$x, x$y, : 윈
## 도우즈 폰트데이터베이스에서 찾을 수 없는 폰트페밀리입니다

=> 워드 클라우드 만든 후 확인한 결과, 전체 리뷰에서 가장 많이 사용된 단어는 ‘배달’이고 그 다음으로 ’주문’, ‘수수료’ 순으로 많이 사용된 것이 나타난다.

그 외에도 ‘어플’, ‘사용’, ‘리뷰’, ‘업데이트’ 등 주로 배달의 민족 서비스가 운영되는 플랫폼인 ’어플리케이션’과 관련된 단어가 주로 등장하는 것이 확인된다.

워드 클라우드를 통해 해당 원문, 고객 리뷰가 전체적으로 어떤 내용에 대해 언급하고 있는지 대략적인 파악이 가능하다.


3. 토픽을 찾기 위한 적합한 토픽의 수를 찾고 설명하기 바랍니다. (10)

적합한 토픽의 수를 찾는 방법을 하이퍼 파라미터 튜닝, 초모수 튜닝이라고 한다.
초모수 튜닝은 토픽 수를 바꾸어 가며 여러 모델을 만든 후 모델별 성능을 비교한 것이다.
토픽 수가 너무 적으면 대부분의 단어가 한 토픽의 주요 단어가 되므로, 토픽 모델링을 하지 않고 그냥 원 데이터 그 자체를 분석하는 것과 비슷해진다.
토픽 수가 너무 많으면 여러 토픽에 주요 단어가 중복되어 토픽마다의 개성이 드러나지 않게 된다.
따라서 최적의 토픽 수를 찾는 것이 중요하다.

DTM (Documetn Term Matrix, 문서 단어 행렬) 은 행은 문서, 열은 단어로 구성해 빈도를 나타낸 행렬이다.

즉, 문서 별 단어 빈도를 표현한다.
# 문서별 단어 빈도 구하기
count_word_doc<- count_word %>%
  count(id, word, sort = T)

count_word_doc
## # A tibble: 17,063 x 3
##       id word       n
##    <int> <chr>  <int>
##  1  1940 배달       9
##  2  1018 사진       8
##  3  1906 확인       8
##  4  2079 아이디     8
##  5   278 배달       7
##  6  1088 인증       7
##  7  1326 계정       7
##  8  2058 확인       7
##  9   804 취소       6
## 10   832 만원       6
## # ... with 17,053 more rows
# DTM (Documetn Term Matrix) 만들기
dtm_baemin <- count_word_doc %>%
  cast_dtm(document = id, term = word, value = n)

dtm_baemin
## <<DocumentTermMatrix (documents: 2130, terms: 5185)>>
## Non-/sparse entries: 17063/11026987
## Sparsity           : 100%
## Maximal term length: 51
## Weighting          : term frequency (tf)
# dtm의 내용 확인하기 (15X15 행렬 형태로)
as.matrix(dtm_baemin[1:15, 1:15])
##       Terms
## Docs   배달 사진 확인 아이디 인증 계정 취소 만원 주문 시간 요청사항 영수증
##   1940    9    0    0      0    0    0    0    0    0    5        0      0
##   1018    0    8    0      0    0    0    0    0    0    0        0      0
##   1906    0    0    8      0    0    0    0    0    3    1        0      0
##   2079    0    0    2      8    0    0    0    0    0    0        0      0
##   278     7    0    0      0    0    0    0    0    0    0        0      0
##   1088    0    0    0      0    7    0    0    0    1    0        0      0
##   1326    0    0    1      0    0    7    0    1    2    0        0      0
##   2058    0    0    7      0    0    0    0    0    0    0        0      0
##   804     1    0    0      0    0    0    6    0    4    1        0      0
##   832     0    0    0      0    0    0    0    6    0    0        0      0
##   1455    3    0    0      0    0    0    0    0    6    0        0      0
##   2049    0    0    1      0    0    0    0    0    6    0        0      0
##   2114    3    0    1      0    0    0    1    0    1    6        0      0
##   2132    1    0    0      0    0    0    0    0    2    0        6      0
##   2134    1    0    0      0    0    0    0    0    1    0        0      6
##       Terms
## Docs   사장님 수수료 리스트
##   1940      0      0      0
##   1018      0      0      0
##   1906      0      0      0
##   2079      0      0      0
##   278       0      0      0
##   1088      0      0      0
##   1326      0      0      0
##   2058      0      0      0
##   804       0      0      0
##   832       0      1      0
##   1455      0      0      0
##   2049      0      0      0
##   2114      0      0      0
##   2132      0      0      0
##   2134      0      0      0
20개의 LDA 모델을 일단 만들어준다.
각 LDA 모델에 나오는 Griffiths2004 는 복잡도이다. 모델의 성능 지표가 되며, 텍스트를 얼마나 잘 설명하는지를 표현한다.
텍스트의 구조를 잘 설명할 수록 값이 커지게 된다.
# 토픽 수 바꿔가면서 LDA 모델 여러개 만들기
models_baemin<- FindTopicsNumber(dtm = dtm_baemin,
                                topics = 2:20, # 20개의 LDA 모델을 만듦.
                                return_models = T,
                                control = list(seed = 1234))
models_baemin %>% 
  select(topics, Griffiths2004) #Griffiths2004 복잡도 
##    topics Griffiths2004
## 1      20     -123058.6
## 2      19     -122428.6
## 3      18     -122802.2
## 4      17     -123425.9
## 5      16     -122438.6
## 6      15     -123521.9
## 7      14     -122928.2
## 8      13     -123478.0
## 9      12     -123479.6
## 10     11     -123563.5
## 11     10     -124610.0
## 12      9     -124466.0
## 13      8     -125764.9
## 14      7     -127030.7
## 15      6     -128106.2
## 16      5     -128860.7
## 17      4     -131072.1
## 18      3     -133984.9
## 19      2     -138902.1

성능 지표그래프를 그리면 최적 토픽 수에 대해 쉽게 파악할 수 있다.

성능이 높을 수록 y값이 1에 가까워진다. X는 토픽의 수이다.
토픽 수를 늘려도 더 이상 성능이 크게 향상되지 않고 등락 반복하기 시작하는 지점에서 토픽 수를 선택한다.
# 성능 지표 그래프를 통해 최적 토픽 수 정하기
FindTopicsNumber_plot(models_baemin)
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.

=> 토픽의 수는 7개가 적합해 보인다.

또한, 토픽 수가 7개인 모델이 최적의 모델이 된다.

# 토픽 수가 7개인 모델 추출하기
optimal_model<-models_baemin %>%  
  filter(topics == 7) %>%
  pull(LDA_model) %>% # model 추출
  .[[1]] # list 추출

# 최적 모델 내용 확인
glimpse(optimal_model)
## Formal class 'LDA_Gibbs' [package "topicmodels"] with 16 slots
##   ..@ seedwords      : NULL
##   ..@ z              : int [1:19355] 1 1 1 1 1 1 1 1 1 5 ...
##   ..@ alpha          : num 7.14
##   ..@ call           : language topicmodels::LDA(x = dtm, k = x, method = method, control = control)
##   ..@ Dim            : int [1:2] 2130 5185
##   ..@ control        :Formal class 'LDA_Gibbscontrol' [package "topicmodels"] with 14 slots
##   ..@ k              : int 7
##   ..@ terms          : chr [1:5185] "배달" "사진" "확인" "아이디" ...
##   ..@ documents      : chr [1:2130] "1940" "1018" "1906" "2079" ...
##   ..@ beta           : num [1:7, 1:5185] -1.73 -7.32 -5.96 -10.43 -10.43 ...
##   ..@ gamma          : num [1:2130, 1:7] 0.2695 0.1071 0.1076 0.0994 0.2857 ...
##   ..@ wordassignments:List of 5
##   .. ..$ i   : int [1:17063] 1 1 1 1 1 1 1 1 1 1 ...
##   .. ..$ j   : int [1:17063] 1 10 67 87 106 110 114 369 392 430 ...
##   .. ..$ v   : num [1:17063] 1 5 1 4 6 1 1 4 1 5 ...
##   .. ..$ nrow: int 2130
##   .. ..$ ncol: int 5185
##   .. ..- attr(*, "class")= chr "simple_triplet_matrix"
##   ..@ loglikelihood  : num -124036
##   ..@ iter           : int 2000
##   ..@ logLiks        : num [1:40] -127034 -125105 -124479 -124293 -124631 ...
##   ..@ n              : int 19355

4. 찾은 각각의 토픽에 대해서 TF-IDF를구하고 각 토픽들의 중요단어 10개에 대한 막대그래프를 그리고 설명하시오. (10)

gamma란?
: 문서가 각 토픽에 등장할 확률을 뜻한다.
gamma를 이용하면 원 문서를 토픽별로 구분할 수 있다.
또한, 토픽의 주요 단어와 원문을 함께 살펴보면 토픽의 특징을 이해할 수 있다.

1) 먼저, 문서(리뷰) 별 topic을 지정하기 위해 gamma를 구해준다.

# gamma (문서가 각 토픽에 등장할 확률) 추출 
doc_topic<-tidy(optimal_model, matrix = "gamma")
doc_topic
## # A tibble: 14,910 x 3
##    document topic  gamma
##    <chr>    <int>  <dbl>
##  1 1940         1 0.270 
##  2 1018         1 0.107 
##  3 1906         1 0.108 
##  4 2079         1 0.0994
##  5 278          1 0.286 
##  6 1088         1 0.105 
##  7 1326         1 0.0914
##  8 2058         1 0.117 
##  9 804          1 0.119 
## 10 832          1 0.0983
## # ... with 14,900 more rows
# gamma가 동점이 발생한 경우 확인하기
doc_topic %>%
  group_by(document) %>%
  top_n(n=1, wt=gamma) %>% 
  count(document) %>% 
  filter(n > 1) %>% print()
## # A tibble: 625 x 2
## # Groups:   document [625]
##    document     n
##    <chr>    <int>
##  1 100          3
##  2 1000         2
##  3 1003         2
##  4 1005         3
##  5 1006         4
##  6 1008         2
##  7 1009         2
##  8 1010         3
##  9 1015         2
## 10 102          3
## # ... with 615 more rows
gamma가 동점인 경우 document, 즉 한 리뷰가 여러 토픽으로 분류될 수 있다는 의미이다.
무조건 하나의 리뷰가 하나의 토픽으로만 분류되게 처리해도 되지만, 굳이 처리하지 않아도 괜찮다.
해당 프로젝트에서는 따로 처리해주지 않는다.
# 문서별 확률이 가장 높은 토픽 추출
doc_class <- doc_topic %>%
  group_by(document) %>%
  slice_max(gamma, n = 1) 
doc_class # 감마가 동점이 발생하는 경우가 있음. 
## # A tibble: 3,075 x 3
## # Groups:   document [2,130]
##    document topic gamma
##    <chr>    <int> <dbl>
##  1 1            2 0.212
##  2 10           7 0.206
##  3 100          1 0.154
##  4 100          2 0.154
##  5 100          3 0.154
##  6 1000         3 0.163
##  7 1000         6 0.163
##  8 1001         4 0.219
##  9 1002         3 0.169
## 10 1003         4 0.166
## # ... with 3,065 more rows

2) 다음으로, 원문 (리뷰 원문 기준) 에 확률 (gamma) 이 가장 높은 토픽의 번호 를 부여해준다.

여기까지 진행하면 기존 원문에 topic과 gamma 값이 추가된다
# documnet 변수 타입을 정수형으로 통일 (데이터셋 결합하기 위해)
doc_class$document <- as.integer(doc_class$document) #데이터셋 변환 가능

# 원문에 감마 (확률) 값이 가장 높게 나온 토픽의 번호 부여
baemin_topic <- baemin %>%
  left_join(doc_class, by = c("id" = "document"))

# 결합 확인 (기존 원문에 topic, gamma 변수와 값이 추가됨)
baemin_topic %>%
  select(id, topic)
## # A tibble: 3,089 x 2
##       id topic
##    <int> <int>
##  1     1     2
##  2     2     3
##  3     3     1
##  4     3     2
##  5     3     4
##  6     3     6
##  7     4     2
##  8     5     2
##  9     6     2
## 10     6     4
## # ... with 3,079 more rows

3) 그 다음, 토픽 별 문서 수를 살펴본다.

topic이 NA인 문서, 즉 토픽으로 분류되지 않은 리뷰가 있는 것은 제거해준다.
# 토픽별 문서 수 보기
baemin_topic %>%
  count(topic) #topic이 NA 인 문서가 13개 있음.
## # A tibble: 8 x 2
##   topic     n
##   <int> <int>
## 1     1   425
## 2     2   479
## 3     3   459
## 4     4   454
## 5     5   394
## 6     6   496
## 7     7   368
## 8    NA    14
# topic이 NA인 문서 제거
baemin_topic <- baemin_topic %>%
  na.omit()

baemin_topic %>%
  count(topic)
## # A tibble: 7 x 2
##   topic     n
##   <int> <int>
## 1     1   425
## 2     2   479
## 3     3   459
## 4     4   454
## 5     5   393
## 6     6   496
## 7     7   368

=> 이 과정이 종료되면 원문에 토픽 번호가 붙게 되고 특정 topic으로 분류되지 않은 문서가 제거된다. 리뷰마다 토픽에 맞게 분류된 것이다.

4) 원문이 토픽별로 분류되었으면 각각의 토픽별로 TF-IDF 를 구해준다.

TF-IDF란?
: 어떤 단어가 흔하지 않으면서 (타 텍스트에서는 잘 나오지 않음), 특정 텍스트 (문서, 여기서는 리뷰이다.)에서 자주 사용되는지의 정도를 나타낸 지표이다.
텍스트 (문서, document)의 개성을 드러내는 주요 단어 (특정 TOPIC에서 자주 사용되지만 다른 토픽에서는 잘 쓰이지 않는 단어) 를 찾는데 활용된다.
즉, 어떤 단어가 특정 문서 내에서 얼마나 중요한 것인지를 나타내는 통계적 수치이다.
# 토픽번호가 붙은 원문 전처리 및 토큰화 진행
baemin_topic_token<-baemin_topic %>% 
  unnest_tokens(input = reply,
                output = word,
                token = extractNoun,
                drop = F) %>% 
  filter(str_count(word) > 1) # 두 글자 이상 추출
TF-IDF는 TOPIC의 개성을 드러내는 중요한 단어 (흔하지 않지만, 특정 TOPIC에서는 자주 사용되는 단어) 를 찾아주는 것이니 따로 주제어를 제거하지 않는다.
주제어일 경우 TF-IDF는 낮게 나올 것이다.

TF-IDF는 TOPIC의 개성을 드러내는 중요한 단어 (흔하지 않지만, 특정 TOPIC에서는 자주 사용되는 단어) 를 찾아주는 것이니 stopword를 제거하지 않는다.
stopword일 경우 TF-IDF는 낮게 나올 것이다.
# 단어 빈도 구하기
freq <-baemin_topic_token %>%
  count(topic, word) %>%  print()
## # A tibble: 10,415 x 3
##    topic word       n
##    <int> <chr>  <int>
##  1     1 가게      17
##  2     1 가겠       1
##  3     1 가격       7
##  4     1 가관       1
##  5     1 가능      12
##  6     1 가능해     1
##  7     1 가면       1
##  8     1 가입       1
##  9     1 가장       1
## 10     1 가중       1
## # ... with 10,405 more rows
# tf-idf 구하기
freq <- freq %>% 
  bind_tf_idf(term = word, # 단어는 word 변수, 
              document = topic, # 텍스트 구분 기준은 topic,
              n = n) %>% # 단어 빈도
  arrange(-tf_idf)
freq
## # A tibble: 10,415 x 6
##    topic word         n      tf   idf  tf_idf
##    <int> <chr>    <int>   <dbl> <dbl>   <dbl>
##  1     7 아이디      26 0.00714 0.847 0.00605
##  2     7 번호        61 0.0168  0.336 0.00564
##  3     7 로그인      54 0.0148  0.336 0.00499
##  4     2 프로         9 0.00247 1.95  0.00480
##  5     6 지원        16 0.00368 1.25  0.00461
##  6     7 회원가      17 0.00467 0.847 0.00396
##  7     1 라이더      23 0.00678 0.560 0.00380
##  8     7 페이스북     7 0.00192 1.95  0.00374
##  9     2 울트라       7 0.00192 1.95  0.00374
## 10     7 비밀        24 0.00659 0.560 0.00369
## # ... with 10,405 more rows
# 토픽별 주요 단어 10개 추출
top10_tf_idf<- freq%>%
  group_by(topic) %>%
  slice_max(tf_idf, n = 10, with_ties = F)


# 그래프 순서 지정
top10_tf_idf$topic <- factor(top10_tf_idf$topic,
                         levels = c(1:7)) # 토픽 1->7 순으로 지정


# 막대 그래프 그리기
top10_tf_idf %>% 
  ggplot(aes(x = reorder_within(x=word, by=tf_idf, within=topic),
             y = tf_idf,
             fill = topic)) +
  labs(x = "", y = "y는 tf-idf", title = "TOPIC별 중요한 단어", subtitle="(다른 TOPIC 대비 특정 TOPIC에서 강조한 단어)") +
  geom_text(aes(label = round(tf_idf,4) , hjust = -0.1),
            color = "dark grey", size=6)+ 
  geom_col(show.legend = F) +
  coord_flip() +
  facet_wrap(~ topic, scales = "free", ncol = 4) +
  scale_x_reordered() +
  labs(x = NULL) +
  theme(text = element_text(size=25))

=> TF-IDF가 높은 단어들은 다른 토픽 대비 각 토픽에서 중요하게 쓰이는 단어이다.

TF-IDF 를 이용할 경우 단순히 빈도수 (n) 가 큰 단어들을 나열하여 토픽의 특성을 파악하는 것보다 더 토픽의 고유한 특성에 대해 잘 파악할 수 있다.

TF-IDF 로 구한 토픽별 중요 단어는 가중 로그 오즈비로 구한 토픽별 중요 단어와는 차이가 있다. 자세한 사항은 8번에서 설명한다.

5. 각각의 토픽들에 대해서 중요단어를 나타내는 beta의 값이 큰 순서대로 워드클라우드를 그리고 설명을 하시오. (10)

beta란?
:단어가 각 토픽에 들어갈 확률이다.
beta를 통해 각 토픽에 등장할 가능성이 높은 주요 단어를 알 수 있다.
# beta (단어가 각 토픽에 들어갈 확률) 추출하기
term_topic <- tidy(optimal_model, matrix = "beta") 
term_topic
## # A tibble: 36,295 x 3
##    topic term       beta
##    <int> <chr>     <dbl>
##  1     1 배달  0.177    
##  2     2 배달  0.000660 
##  3     3 배달  0.00258  
##  4     4 배달  0.0000295
##  5     5 배달  0.0000296
##  6     6 배달  0.0000295
##  7     7 배달  0.0000301
##  8     1 사진  0.0000315
##  9     2 사진  0.0000314
## 10     3 사진  0.0000319
## # ... with 36,285 more rows
beta를 구했다면 해당 값을 가지고 토픽별 워드 클라우드를 그려준다.
워드 클라우드에 대한 자세한 설명은 2번에서 진행했으므로 생략한다.

2번 문제와 다른 점이 있다면 워드 클라우드를 구성하는는 단어의 크기를 빈도수(n) 이 아닌 beta*10000로 지정했다는 것이다.
워드 클라우드에는 정확한 수치로 표현되지 않고, 빈도수 차이에 따라 단어 크기에 차이를 준 그림으로 표현된다.
때문에 워드 클라우드의 단어 크기를 지정할 때 ‘상대적인’ 빈도수 (확률의 형태 등) 로 표현해주는 경우도 가능하다.
현재 항목에서 beta*10000 로 크기를 지정한것이 2번에서 size를 n으로 지정해준 것과 의미상 유사하게 , 시각적으로 큰 차이가 없게 작용하는 것이다.

참고로 각 word_cloud의 크기 (범위) 가 html로 확인할 시에는 다소 작게 표현되도록 지정하였다.
여러 wordcloud를 한번에 비교하는 경우를 포함하였기에 range = c(5,25)로 지정한 것이다.
# 워드 클라우드 그리기

#토픽 1의 워드 클라우드
term_topic1 <- term_topic %>% filter(topic == 1)
word1<-term_topic1 %>%
  ggplot(aes(label = term, size = beta*10000, # 크기는 beta*10000
             color = factor(sample.int(n=10,
                                       size=nrow(term_topic1), replace = TRUE)))) +
  geom_text_wordcloud(seed = 1234) +
  scale_radius(limits = c(10, NA), # 최소 단어가 10번 이상 나와야 함.
               range = c(5,25)) +
  ggtitle("TOPIC 1")+
  theme_minimal()

word1

#토픽 2의 워드 클라우드
term_topic2 <- term_topic %>% filter(topic == 2)
word2<-term_topic2 %>%
  ggplot(aes(label = term, size = beta*10000, # 크기는 beta*10000
             color = factor(sample.int(n=10,
                                       size=nrow(term_topic2), replace = TRUE)))) + 
  geom_text_wordcloud(seed = 1234) +
  scale_radius(limits = c(10, NA),  # 최소 단어가 10번 이상 나와야 함.
               range = c(5,25)) +
  ggtitle("TOPIC 2")+
  theme_minimal() 

word2

#토픽 3의 워드 클라우드
term_topic3<- term_topic %>% filter(topic ==3)
word3<-term_topic3 %>%
  ggplot(aes(label = term, size = beta*10000, # 크기는 beta*10000
             color = factor(sample.int(n=10,
                                       size=nrow(term_topic3), replace = TRUE)))) +
  geom_text_wordcloud(seed = 1234) +
  scale_radius(limits = c(5,25),  # 최소 단어가 10번 이상 나와야 함.
               range = c(3, 15)) +
  ggtitle("TOPIC 3")+
  theme_minimal()

word3

#토픽 4의 워드 클라우드
term_topic4 <- term_topic %>% filter(topic == 4)
word4<-term_topic4 %>%
  ggplot(aes(label = term, size = beta*10000, # 크기는 beta*10000
             color = factor(sample.int(n=10,
                                       size=nrow(term_topic4), replace = TRUE)))) +
  geom_text_wordcloud(seed = 1234) +
  scale_radius(limits = c(10, NA),  # 최소 단어가 10번 이상 나와야 함.
               range = c(5,25)) +
  ggtitle("TOPIC 4")+
  theme_minimal()

word4

#토픽 5의 워드 클라우드
term_topic5 <- term_topic %>% filter(topic == 5)
word5<-term_topic5 %>%
  ggplot(aes(label = term, size = beta*10000, # 크기는 beta*10000
             color = factor(sample.int(n=10,
                                       size=nrow(term_topic5), replace = TRUE)))) +
  geom_text_wordcloud(seed = 1234) +
  scale_radius(limits = c(10, NA),  # 최소 단어가 10번 이상 나와야 함.
               range = c(5,25)) +
  ggtitle("TOPIC 5")+
  theme_minimal()

word5

#토픽 6의 워드 클라우드
term_topic6 <- term_topic %>% filter(topic == 6)
word6<-term_topic6 %>%
  ggplot(aes(label = term, size = beta*10000, # 크기는 beta*10000
             color = factor(sample.int(n=10,
                                       size=nrow(term_topic6), replace = TRUE)))) +
  geom_text_wordcloud(seed = 1234) +
  scale_radius(limits = c(10, NA),  # 최소 단어가 10번 이상 나와야 함.
               range = c(5,25)) +
  ggtitle("TOPIC 6")+
  theme_minimal()

word6

#토픽 7의 워드 클라우드
term_topic7 <- term_topic %>% filter(topic == 7)
word7<-term_topic7 %>%
  ggplot(aes(label = term, size = beta*10000, # 크기는 beta*10000
             color = factor(sample.int(n=10,
                                       size=nrow(term_topic7), replace = TRUE)))) +
  geom_text_wordcloud(seed = 1234) +
  scale_radius(limits = c(10, NA), # 최소 단어가 10번 이상 나와야 함.
               range = c(5,25)) +
  ggtitle("TOPIC 7")+
  theme_minimal()

word7

# 워드클라우드 여러개를 동시에 나타내기

grid.arrange(word1,word2,word3,word4,ncol=2)
## Warning in wordcloud_boxes(data_points = points_valid_first, boxes = boxes, :
## Some words could not fit on page. They have been placed at their original
## positions.

grid.arrange(word5,word6,word7, ncol=2)
## Warning in wordcloud_boxes(data_points = points_valid_first, boxes = boxes, :
## Some words could not fit on page. They have been placed at their original
## positions.

=> 워드 클라우드 확인 결과 토픽 1의 주요 단어는 ‘결제’, ‘번호’, ‘문제’ , ‘로그인’, ‘인증’ 등으로 나타난다.

=> 워드 클라우드 확인 결과 토픽 2의 주요 단어는 ‘리뷰’, ‘주문’, ‘음식’, 음식’, ‘가게’ 등으로 나타난다.

=> 워드 클라우드 확인 결과 토픽 3의 주요 단어는 ‘단어’, ‘검색기능’, ‘메뉴판’, ‘공지’, ‘잘못’ 등으로 나타난다.

7개의 토픽 중 topic 3이 가장 워드 클라우드만을 보고 중요한 단어가 무엇인지 판단하기가 어렵다.
여러개의 단어들의 beta값이 비슷하게 나와 가장 핵심적인 단어가 무엇인지 한눈에 확인하기 비교적 어렵다.

=> 워드 클라우드 확인 결과 토픽 4의 주요 단어는 ‘이벤트’, ‘쿠폰’, ‘이용’, ‘요기요’, ‘할인’ 등으로 나타난다.

=> 워드 클라우드 확인 결과 토픽 5의 주요 단어는 ‘사용’, ‘어플’, ‘불편’ 등으로 나타난다.

=> 워드 클라우드 확인 결과 토픽 6의 주요 단어는 ‘수수료’, ‘삭제’, ‘탈퇴’, ‘독과점’ 등으로 나타난다.

타 토픽 대비 부정적인 감정과 행동이 나타내는 단어가 많은 것으로 확인된다.

=> 워드 클라우드 확인 결과 토픽 7의 주요 단어는 ‘주문’, ‘업데이트’, ‘확인’, ‘금액’, ‘카드’ 등으로 나타난다.

=> 7개 토픽 각각의 워드 클라우드를 확인한 결과, 전체 리뷰의 워드 클라우드 (2번 참고) 에서 중요 단어로 나타났던 ‘배달’, ‘주문’,‘어플’, ‘사용’, ‘리뷰’, ‘업데이트’ 등의 단어들이 각 토픽별 워드 클라우드에 골고루 배분되어 있다.

또한 해당 단어들 각각은 분류된 토픽은 다를지라도 각 토픽에서 중요 단어인 것이 확인된다.

6. 각각의 토픽들에 대해서 중요단어를 나타내는 beta의 값의 크기에 따른 그래프를 그리고 설명하시오. (10)

5번 항목에서 beta를 추출한 term_topic을 사용한다.
beta에 대한 설명도 5번 항목에서 자세하게 진행했으므로 생략한다.
# 토픽별 beta가 높은 상위 10개 단어 추출
top10_term_topic<- term_topic %>%
  group_by(topic) %>%
  slice_max(beta, n = 10, with_ties = F) %>% # 동점 제외
  ungroup() %>%
  arrange(topic, -beta)

top10_term_topic
## # A tibble: 70 x 3
##    topic term      beta
##    <int> <chr>    <dbl>
##  1     1 배달   0.177  
##  2     1 이용   0.0416 
##  3     1 이상   0.0148 
##  4     1 라이더 0.0133 
##  5     1 주소   0.0126 
##  6     1 업체   0.0126 
##  7     1 지역   0.0107 
##  8     1 가능   0.00979
##  9     1 수정   0.00916
## 10     1 소비자 0.00916
## # ... with 60 more rows
# 막대 그래프로 나타내기
top10_term_topic %>% 
  ggplot(aes(x = reorder_within(term, beta, topic),
             y = beta,
             fill = factor(topic))) +
  labs(x = "", y = "y는 beta", title = "TOPIC별 중요한 단어", subtitle="(토픽별 각 토픽에 등장할 확률이 높은 단어)") +
  geom_text(aes(label = round(beta,4) , hjust = -0.2),
            color = "dark grey", size=6)+ 
  geom_col(show.legend = F) +
  facet_wrap(~ topic, scales = "free",ncol = 4) +
  coord_flip() +
  scale_x_reordered() +
  theme(text = element_text(size=25))

=> 각 토픽에 등장할 확률이 높은 단어 (beta 값 이용) 에 대해 토픽별로 분류해서 한 번에 나타내었다.

=>beta를 이용해서 각 토픽별 중요 단어를 분석한 결과는 TF-IDF를 사용해서 각 토픽별 주요단어를 표현한 것과는 차이가 있다는 것이 확인된다. (4번 항목 참고)

7. 찾은 각각의 토픽의 집단 내에서의 감정분석을 하고 설명을 하시오. (10)

감정 분석이란?
: 텍스트에 어떤 감정이 담겨있는지 분석하는 방법이다.
사람들이 어떤 주제를 긍정적 / 부정적으로 느끼는지를 파악할 수 있다.

감정 분석을 위해서는 인간의 ’감정’에 정의한 데이터가 필요하다.
즉, 해당 단어가 감정에 대한 단어인지, 감정을 나타낸 단어가 맞다면 긍정 단어인지, 부정 단어인지를 파악할 수 있어야 한다.

이러한 감정의 파악을 위해 감정 사전을 사용한다. 감정 사전은 감정 단어’와 ’감정의 강도를 표현한 숫자’로 구성된 사전이다.
어떤 것을 분석하는지에 따라 차이가 있으나 기본적으로 감정 사전을 이용해 문장의 단어에 감정 점수를 부여한 다음 합산하는 방식을 주로 이용한다.

해당 프로젝트에서는 ’KNU 한국어 감성사전’을 사용한다.
# 감정 사전 불러오기 (KNU 한국어 감성사전 사용)
senti_dic <- read_delim('C:/knu_senti_dict-master/knu_senti_dict-master/SentiWord_Dict.txt', delim='\t', col_names=c("word", "polarity"))
## Rows: 14843 Columns: 2
## -- Column specification --------------------------------------------------------
## Delimiter: "\t"
## chr (1): word
## dbl (1): polarity
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
# 감정 사전 탐색
head(senti_dic,10)
## # A tibble: 10 x 2
##    word  polarity
##    <chr>    <dbl>
##  1 (-;          1
##  2 (;_;)       -1
##  3 (^^)         1
##  4 (^-^)        1
##  5 (^^*         1
##  6 (^_^)        1
##  7 (^_^;       -1
##  8 (^o^)        1
##  9 (-_-)       -1
## 10 (T_T)       -1
dim(senti_dic)
## [1] 14843     2
table(senti_dic$polarity)
## 
##   -2   -1    0    1    2 
## 4797 5029  154 2266 2597
# 완전 긍정 (2점) 단어 보기
senti_dic %>%
  filter(polarity == 2) %>%
  arrange(word)
## # A tibble: 2,597 x 2
##    word              polarity
##    <chr>                <dbl>
##  1 가능성이 늘어나다        2
##  2 가능성이 있다고          2
##  3 가능하다                 2
##  4 가볍고 상쾌하다          2
##  5 가볍고 상쾌한            2
##  6 가볍고 시원하게          2
##  7 가볍고 편안하게          2
##  8 가볍고 환하게            2
##  9 가운데에서 뛰어남        2
## 10 가장 거룩한              2
## # ... with 2,587 more rows
# 완전 부정 (-2점) 단어 보기
senti_dic %>%
  filter(polarity == -2) %>%
  arrange(word)
## # A tibble: 4,797 x 2
##    word            polarity
##    <chr>              <dbl>
##  1 가난                  -2
##  2 가난뱅이              -2
##  3 가난살이              -2
##  4 가난살이하다          -2
##  5 가난설음              -2
##  6 가난에                -2
##  7 가난에 쪼들려서       -2
##  8 가난하게              -2
##  9 가난하고              -2
## 10 가난하고 어렵다       -2
## # ... with 4,787 more rows
# 이모티콘 보기
senti_dic %>%
  filter(!str_detect(word, "[가-힣]")) %>%
  arrange(word)
## # A tibble: 77 x 2
##    word  polarity
##    <chr>    <dbl>
##  1 -_-^        -1
##  2 (-;          1
##  3 (-_-)       -1
##  4 (;_;)       -1
##  5 (^-^)        1
##  6 (^^)         1
##  7 (^^*         1
##  8 (^_^)        1
##  9 (^_^;       -1
## 10 (^o^)        1
## # ... with 67 more rows
# 감정사전 내 긍정 단어, 중립, 부정 단어의 수 보기
senti_dic %>%
  mutate(sentiment = ifelse(polarity >= 1, "pos",
                            ifelse(polarity <= -1, "neg", 
                                   "neu"))) %>%
  count(sentiment)
## # A tibble: 3 x 2
##   sentiment     n
##   <chr>     <int>
## 1 neg        9826
## 2 neu         154
## 3 pos        4863
# 감정사전 내 완전 긍정 단어, 중립 (완전 긍정과 완전 부정이 아니면 모두 중립), 완전 부정 단어의 수 보기
senti_dic %>%
  mutate(sentiment = ifelse(polarity == 2, "pos",
                            ifelse(polarity == -2, "neg", 
                                   "neu"))) %>%
  count(sentiment)
## # A tibble: 3 x 2
##   sentiment     n
##   <chr>     <int>
## 1 neg        4797
## 2 neu        7449
## 3 pos        2597
지금부터 토픽별 감정 분석을 진행한다.
감정 분석은 크게 1. 토픽별 자주 사용하는 긍정/부정 단어 확인 , 2. 토픽 별 감정 경향 확인 , 3. 토픽별 긍정/부정 리뷰에서 자주 사용하는 단어 확인 등의 형태로 진행된다.

따라서 토픽 1부터 토픽 7까지 앞서 언급한 3가지 헝태의 감정 분석을 진행할 것이다.
토픽 1의 감정 분석을 모두 마친 후 다음 토픽의 감정 분석을 진행할 예정이며, 한 토픽의 감정 분석이 끝난 후 다음 토픽 감정 분석을 전개하는 비슷한 과정이 반복된다.
따라서 토픽 1만 상세하게 설명을 진행할 예정이며, 토픽 2부터 7까지는 간단히 주석만 달 예정이다.

0) 전처리 진행 (전 토픽 공통)

앞선 과정에서 이미 extractNoun 기준으로 토큰화를 진행하였다.
그러나 이는 형태소 분석 처리된 명사 형태 (baemin_topic_token의 word 변수)이다.
따라서, extractNoun 기준으로 토큰화가 진행할 경우 동사가 누락될 수 있다.

따라서 words (단어, 띄어쓰기로 분리됨) 기준으로 토큰화를 진행한다.
# topic이 포함된 원문 token화 진행.
word_baemin<-baemin_topic_token %>%
  unnest_tokens(input = reply, 
                output = word, 
                token = "words", drop = F) %>%
  filter(str_count(word) > 1) %>% print() # 두 글자 이상 추출
## # A tibble: 646,256 x 8
##    날짜                닉네임 리뷰내용           id reply      topic gamma word 
##    <dttm>              <chr>  <chr>           <int> <chr>      <int> <dbl> <chr>
##  1 2020-04-10 00:00:00 최세헌 업데이트 이후 ~     1 업데이트 ~     2 0.212 업데~
##  2 2020-04-10 00:00:00 최세헌 업데이트 이후 ~     1 업데이트 ~     2 0.212 이후 
##  3 2020-04-10 00:00:00 최세헌 업데이트 이후 ~     1 업데이트 ~     2 0.212 쿠폰~
##  4 2020-04-10 00:00:00 최세헌 업데이트 이후 ~     1 업데이트 ~     2 0.212 최저~
##  5 2020-04-10 00:00:00 최세헌 업데이트 이후 ~     1 업데이트 ~     2 0.212 생긴 
##  6 2020-04-10 00:00:00 최세헌 업데이트 이후 ~     1 업데이트 ~     2 0.212 너무 
##  7 2020-04-10 00:00:00 최세헌 업데이트 이후 ~     1 업데이트 ~     2 0.212 불편~
##  8 2020-04-10 00:00:00 최세헌 업데이트 이후 ~     1 업데이트 ~     2 0.212 서비~
##  9 2020-04-10 00:00:00 최세헌 업데이트 이후 ~     1 업데이트 ~     2 0.212 앱과 
## 10 2020-04-10 00:00:00 최세헌 업데이트 이후 ~     1 업데이트 ~     2 0.212 영업~
## # ... with 646,246 more rows
extractNoun를 기준으로 토큰화를 진행한 후의 감정 분석 결과와 words를 기준으로 토큰화를 진행한 후의 감정 분석 결과는 큰 차이가 있었다.
extractNoun로 진행할 경우 제거되는 단어들이 너무 많았다.
반면, words로 진행할 경우에는 행태소 분석이 되지 않아 유의어가 너무 많았다.

따라서 본 연구자는 해당 프로젝트에서 words를 기준으로 하여 token화를 진행하는 방식을 선택하였다.
유의어가 발생하는 경우 해석에 주의를 하면 분석 결과에 대해 파악할 수 있으나 단어가 제거되는 경우 보다 왜곡된 결과를 가져올 수 있다고 판단하였기 때문이다.
따라서, 본 수업 및 교재에 나온 것과 같이 words를 기준으로 하여 token화를 진행하였으며 유의어 및 stopword에 주의하여 분석 결과를 해석하였다.

1-1) 토픽1의 최빈 단어별 감정분석

먼저, 토큰화된 데이터에서 토픽 1만을 선택해준다.
# 토픽1 선택
topic1<-word_baemin %>% 
  filter(topic==1) %>% 
  select(topic, id, word, reply ) %>% print()
## # A tibble: 82,512 x 4
##    topic    id word     reply                                                    
##    <int> <int> <chr>    <chr>                                                    
##  1     1     3 배민     배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  2     1     3 년동안   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  3     1     3 썼는데   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  4     1     3 월부터   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  5     1     3 정책이   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  6     1     3 불편하게 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  7     1     3 바꿨네요 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  8     1     3 자영업자 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  9     1     3 수수료도 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
## 10     1     3 그렇고   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
## # ... with 82,502 more rows
감정사전 senti_dic을 활용하여 각 단어별 감정 점수를 부여한다.
감정 사전에 없는 단어는 0점이다. (중립)
# 감정점수 부여
topic1 <- topic1 %>%
  left_join(senti_dic, by = "word") %>%
  mutate(polarity = ifelse(is.na(polarity), 0, polarity)) # 사전에 없는 단어의 점수는 0

topic1 %>% 
  dplyr::select(word, polarity)
## # A tibble: 82,512 x 2
##    word     polarity
##    <chr>       <dbl>
##  1 배민            0
##  2 년동안          0
##  3 썼는데          0
##  4 월부터          0
##  5 정책이          0
##  6 불편하게       -2
##  7 바꿨네요        0
##  8 자영업자        0
##  9 수수료도        0
## 10 그렇고          0
## # ... with 82,502 more rows
감정이 분명한 단어를 살펴보기 위해 완전긍정 (2점. 그냥 긍정이라 칭하겠다.), 완전부정 (-2점, 그냥 부정이라 칭하겠다.), 중립 (-1,0,1점, 긍정 및 부정으로 분류되지 않은 것들이 속하게 된다.) 으로 단어를 분류한다.
# 감정분류
topic1 <- topic1 %>%
  mutate(sentiment = ifelse(polarity ==2, "pos",
                            ifelse(polarity == -2, "neg", "neu")))

topic1 %>%
  count(sentiment)
## # A tibble: 3 x 2
##   sentiment     n
##   <chr>     <int>
## 1 neg         321
## 2 neu       81736
## 3 pos         455
해당 토픽에서 중립을 제외하고 완전긍정, 완전부정 단어가 얼마나 사용되었는지를 확인한다.
# 긍정/부정 상위 10개 단어보기
top10_sentiment1 <- topic1 %>%
  filter(sentiment != "neu") %>% # 중립 단어 제외
  count(sentiment, word) %>%
  group_by(sentiment) %>%
  slice_max(n, n = 10) %>% print(n=Inf) # 중복 허용
## # A tibble: 21 x 3
## # Groups:   sentiment [2]
##    sentiment word         n
##    <chr>     <chr>    <int>
##  1 neg       짜증을      47
##  2 neg       심각한      32
##  3 neg       어려운      29
##  4 neg       힘든        28
##  5 neg       쓸데없는    25
##  6 neg       화나고      20
##  7 neg       분이나      16
##  8 neg       더럽고      15
##  9 neg       부담        12
## 10 neg       불편하게    12
## 11 neg       형편없다    12
## 12 pos       좋은        57
## 13 pos       편하고      50
## 14 pos       편하게      48
## 15 pos       옳게        43
## 16 pos       좋음        34
## 17 pos       편히        32
## 18 pos       좋다        27
## 19 pos       장점을      21
## 20 pos       잘되고      19
## 21 pos       좋을        18
# 막대 그래프 그리기
top10_sentiment1 %>% 
  ggplot(aes(x = reorder(word, n),
             y = n,
             fill = sentiment)) +
  geom_col() +
  coord_flip() +
  geom_text(aes(label = n), hjust = -0.1,
            color = "dark grey", size=6) +
  facet_wrap(~ sentiment, scales = "free") +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.25))) +
  labs(x = NULL,y = "빈도수 (n)", title = "TOPIC 1에서 자주 사용된 감정단어 ") +
  theme(text = element_text(size=25))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))

1-2) 토픽1의 전체적인 감정 경향 구하기

먼저, 해당 토픽내 리뷰별 감정 점수를 구한다.
리뷰별 감정 점수는 id (리뷰별 구분), reply별로 분리한 다음 polarity를 합산하였다.
# 리뷰별 감정 점수 
score_comment1 <- topic1 %>%
  group_by(id, reply) %>%
  summarise(score = sum(polarity)) %>%
  ungroup()
## `summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
# 긍정 점수가 높은 리뷰보기 
score_comment1 %>%
  select(score, reply) %>% 
  arrange(-score)
## # A tibble: 425 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1   147 앱상에서 배달시간을 표기한다는것은 소비자 입장에서 참고사항으로 좋을지~
##  2    86 배달을 주업무로 하는 업체에서 지도를 년에 한 번 업데이트 할까 말까 실~ 
##  3    72 많이쓰다보니 편하기는한데 배달팁이 너무 부담스러워요 장기적으로 쓸때 ~ 
##  4    60 너무나도 신속하고 정확하며 친절하게 응대를 해주시는 배민 라이더 분들의~
##  5    56 메뉴가 참 다양해서 좋음 다만 메뉴 가격이나 편리성이 무색해지는 최소주~ 
##  6    45 배민이 수수료를 부과하자 영세 업체들은 우리나라 최초로 배달비라는것을 ~
##  7    44 진짜 몇년째 배민이용하면서 계속 최상 고객이었는데 배민 라이더스 이용하~
##  8    42 복붙대답만 하지마시구요 거리조절기능을 다시 넣으세요 자취방이 구석탱이~
##  9    38 배달은 너무잘됩니다만 업데이트하면 마켓이 사용이 되는거 아니엿습니까 ~ 
## 10    36 평소 배달음식을 자주 시켜 먹어서 많은 도움이 되는 앱입니다 다만 조금 ~ 
## # ... with 415 more rows
# 부정 점수가 높은 리뷰보기
score_comment1 %>%
  select(score, reply) %>% 
  arrange(score)
## # A tibble: 425 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1  -141 배달하시는분 짜증내시는거 정말 돌아버리겠네요 저도 그분에게 짜증은 안~ 
##  2   -92 정말 최악입니다 별 개도 아깝네요 처음 가입 후 주문인데 주소가 이상하다~
##  3   -40 우선 배달업체 광고가 너무 많습니다 두번째는 주문직전 주소바꾸기 안되는~
##  4   -39 우선 이 어플을 몇개월째 이용하고 있는 사람이었지만 어플 내 갈등에 대한~
##  5   -32 도착예정 시간보다 분이나 지났는데도 안오길래 가게에 연락해봤더니 라이~ 
##  6   -32 배민앱 사용한지 어느덧 년 년차 자취생이라 정도로 많이 애용했었습니다 ~ 
##  7   -30 라이더 지정 차단 기능 있었으면 좋겠어요 불친절한 라이더에게는 배달 요~ 
##  8   -24 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자영업자 수수료~ 
##  9   -24 앱 깐지 한 달도 안돼서 삭제하게 되네요 힘들 때 더 힘들게 하는 기업이라~
## 10   -24 배달 수수로 진짜 너무하지 않나요 최소 금액은 물론 배달 수수료까지 너무~
## # ... with 415 more rows
# 감정 점수 빈도 
# 전체적으로 0점이 부여된 리뷰이 가장 많고, 긍정과 부정의 양 극단으로 갈 수록 빈도가 감소함
score_comment1 %>%
  count(score)
## # A tibble: 60 x 2
##    score     n
##    <dbl> <int>
##  1  -141     1
##  2   -92     1
##  3   -40     1
##  4   -39     1
##  5   -32     2
##  6   -30     1
##  7   -24     4
##  8   -23     2
##  9   -21     2
## 10   -20     1
## # ... with 50 more rows
# 감정 분류하기
score_comment1 <- score_comment1 %>%
  mutate(sentiment = ifelse(score >= 1, "pos",
                            ifelse(score <= -1, "neg", "neu")))

# 감정 빈도 및 비율 구하기
freq_score1 <- score_comment1 %>%
  count(sentiment) %>%
  mutate(ratio = n/sum(n)*100) %>% print()
## # A tibble: 3 x 3
##   sentiment     n ratio
##   <chr>     <int> <dbl>
## 1 neg          43  10.1
## 2 neu         313  73.6
## 3 pos          69  16.2
# 막대 그래프 만들기
ggplot(freq_score1, aes(x = sentiment, y = n, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = n), vjust = -0.3, size=20) +
  scale_x_discrete(limits = c("pos", "neu", "neg"))+ # 축 순서 정하기
  theme(legend.box.background = element_rect(fill = "pink"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "감정 단어 유형", y = "빈도수 (n)", title = "TOPIC 1에서 사용된 감정 단어 유형")+
  theme(text = element_text(size=40))

이번에는 누적 막대그래프 형태의 비율로 감정비율을 표현한다.
이를 위해서는 x축과 y축, 누적막대를 표현할 변수가 필요하다. 따라서, x축을 구성할 더미 변수 (가변수) 를 추가한다
# 비율 누적 막대그래프 만들기 - 감정비율 표현
# 더미 변수 생성
freq_score1$dummy <- 0

ggplot(freq_score1, aes(x = dummy, y = ratio, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = paste0(round(ratio, 1), "%")), # % 표시
            position = position_stack(vjust = 0.5), # 가운데에 텍스트 표시
            size=20) +
  theme(axis.title.x = element_blank(), # x축 이름 삭제
        axis.text.x = element_blank(), # x축 값 삭제
        axis.ticks.x = element_blank())+ # x축 값 삭제
  theme(legend.box.background = element_rect(fill = "skyblue"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(y = "비율 (총 100%)", title = "TOPIC 1에서 사용된 감정 단어 유형-비율")+
  theme(text = element_text(size=40))

1-3) 토픽1의 감정 범주 (긍정 /부정) 별 많이 사용되는 단어

리뷰별 감정점수 변수가 추가된 score_comment1 사용한다. 토큰화를 진행한다.
# score_comment를 토큰화 진행
comment1 <- score_comment1 %>%
  unnest_tokens(input = reply,
                output = word,
                token = "words", # extractNoun이라고 지정할 경우 명사만 나옴. 동사도 나와야하므로 그냥 word를 해줌
                drop = F) %>%
  filter(str_detect(word, "[가-힣]") & # 한글 추출
           str_count(word) >= 2) # 두 글자 이상 추출
head(comment1)
## # A tibble: 6 x 5
##      id reply                                              score sentiment word  
##   <int> <chr>                                              <dbl> <chr>     <chr> 
## 1     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       배민  
## 2     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       년동안
## 3     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       썼는데
## 4     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       월부터
## 5     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       정책이
## 6     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       불편~
다음으로 각 감정 (긍정, 부정, 중립) 단어의 어떤 단어가 많이 쓰였는지 (빈도) 를 구해준다.
# 감정 및 단어별 빈도 구하기 
freq_word1 <- comment1 %>%
  filter(str_count(word) >= 2) %>% # 2번 이상 등장하는 단어만
  count(sentiment, word, sort = T) %>% print()
## # A tibble: 4,134 x 3
##    sentiment word       n
##    <chr>     <chr>  <int>
##  1 neu       배달      31
##  2 neu       배민      20
##  3 neu       너무      19
##  4 neu       좋아요    19
##  5 neu       배달이    17
##  6 neu       그냥      16
##  7 neu       다시      15
##  8 pos       편하고    13
##  9 pos       배달      12
## 10 neu       많이      11
## # ... with 4,124 more rows
# 긍정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word1 %>%
  filter(sentiment == "pos")
## # A tibble: 1,020 x 3
##    sentiment word       n
##    <chr>     <chr>  <int>
##  1 pos       편하고    13
##  2 pos       배달      12
##  3 pos       배민      11
##  4 pos       너무       9
##  5 pos       배달앱     8
##  6 pos       다른       7
##  7 pos       좋아요     7
##  8 pos       다른거     6
##  9 pos       정말       6
## 10 pos       배달을     5
## # ... with 1,010 more rows
# 부정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word1 %>%
  filter(sentiment == "neg")
## # A tibble: 778 x 3
##    sentiment word       n
##    <chr>     <chr>  <int>
##  1 neg       너무      10
##  2 neg       배달       8
##  3 neg       정말       6
##  4 neg       리뷰       4
##  5 neg       시기에     4
##  6 neg       됩니다     3
##  7 neg       많이       3
##  8 neg       배달비     3
##  9 neg       배달앱     3
## 10 neg       어려운     3
## # ... with 768 more rows
감정 댓글별 자주 사용된 단어와 빈도수를 구했다면 로그 오즈비를 활용해서 상대적으로 더 자주 사용된 단어가 무엇인지 비교해준다.

로즈오즈비란?
: 로그 상대효율이라 한다. 오즈비에 로그를 취한 것이다,
단어의 오즈비가 1보다 크면 + , 1보다 작으면 -가 되며, 단어가 두 텍스트 중 어디에서 비중이 큰지에 따라 서로 다른 부호를 갖는다. 텍스트 차이 분명하게 드러나도록 시각화하는데 활용한다.
즉, 부호와 크기를 보면 단어가 어느 연설문에서 더 중요한지 알 수 있는 것이다.
# 로그오즈비 계산하기
comment_wide1 <- freq_word1 %>%
  filter(sentiment != "neu") %>%
  pivot_wider(names_from = sentiment, # sentiment의 범주를 변수로 사용
              values_from = n,
              values_fill = list(n = 0)) %>% print() # 단어 없으면 0
## # A tibble: 1,692 x 3
##    word     pos   neg
##    <chr>  <int> <int>
##  1 편하고    13     0
##  2 배달      12     8
##  3 배민      11     2
##  4 너무       9    10
##  5 배달앱     8     3
##  6 다른       7     0
##  7 좋아요     7     0
##  8 정말       6     6
##  9 다른거     6     0
## 10 배달을     5     1
## # ... with 1,682 more rows
# 로그 오즈비 구하는 공식
comment_wide1 <- comment_wide1 %>%
  mutate(log_RR = log(((pos + 1) / (sum(pos + 1))) / # pos에서의 단어의 비중
                        ((neg + 1) / (sum(neg + 1))))) # neg에서의 단어의 비중 => 에 로그 취한값
comment_wide1
## # A tibble: 1,692 x 4
##    word     pos   neg log_RR
##    <chr>  <int> <int>  <dbl>
##  1 편하고    13     0  2.50 
##  2 배달      12     8  0.229
##  3 배민      11     2  1.25 
##  4 너무       9    10 -0.234
##  5 배달앱     8     3  0.672
##  6 다른       7     0  1.94 
##  7 좋아요     7     0  1.94 
##  8 정말       6     6 -0.139
##  9 다른거     6     0  1.81 
## 10 배달을     5     1  0.960
## # ... with 1,682 more rows
# 로그오즈비가 가장 큰 단어 10개 추출 
top10_topic1 <- comment_wide1 %>%
  group_by(sentiment = ifelse(log_RR > 0, "pos", "neg")) %>%
  slice_max(abs(log_RR), n = 10, with_ties = F) # 로그RR 동점 단어 제외
top10_topic1
## # A tibble: 20 x 5
## # Groups:   sentiment [2]
##    word       pos   neg log_RR sentiment
##    <chr>    <int> <int>  <dbl> <chr>    
##  1 시기에       0     4  -1.75 neg      
##  2 배달비       0     3  -1.52 neg      
##  3 어려운       0     3  -1.52 neg      
##  4 이상         0     3  -1.52 neg      
##  5 저는         0     3  -1.52 neg      
##  6 간단한       0     2  -1.24 neg      
##  7 갑자기       0     2  -1.24 neg      
##  8 개도         0     2  -1.24 neg      
##  9 거리가       0     2  -1.24 neg      
## 10 교육         0     2  -1.24 neg      
## 11 편하고      13     0   2.50 pos      
## 12 다른         7     0   1.94 pos      
## 13 좋아요       7     0   1.94 pos      
## 14 다른거       6     0   1.81 pos      
## 15 음식점       5     0   1.65 pos      
## 16 없는         4     0   1.47 pos      
## 17 있습니다     4     0   1.47 pos      
## 18 좋습니다     4     0   1.47 pos      
## 19 편리하게     4     0   1.47 pos      
## 20 편리하고     4     0   1.47 pos
#막대 그래프 그리기

ggplot(top10_topic1, aes(x = reorder(word, log_RR), y = log_RR, fill = sentiment)) +
  geom_col() +
  coord_flip() +
  labs(x = NULL) +
  theme(text = element_text(size=10))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "", y = "y는 로그-오즈비 (logRR)", title = "긍정/부정 리뷰에서 자주 사용된 단어", subtitle="TOPIC 1")+
  theme(text = element_text(size=25))

여기까지가 토픽 1의 감정분석 과정이다.
토픽 2부터 토픽 7까지도 동일한 방식으로 감정 분석을 진행한다.

2-1) 토픽2의 최빈 단어별 감정분석

# 토픽2 선택
topic2<-word_baemin %>% 
  filter(topic==2) %>% 
  select(topic, id, word, reply ) %>% print()
## # A tibble: 81,374 x 4
##    topic    id word       reply                                                 
##    <int> <int> <chr>      <chr>                                                 
##  1     2     1 업데이트   업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고~
##  2     2     1 이후       업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고~
##  3     2     1 쿠폰들에   업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고~
##  4     2     1 최저요금   업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고~
##  5     2     1 생긴       업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고~
##  6     2     1 너무       업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고~
##  7     2     1 불편하고요 업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고~
##  8     2     1 서비스하는 업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고~
##  9     2     1 앱과       업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고~
## 10     2     1 영업점의   업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고~
## # ... with 81,364 more rows
# 감정점수 부여
topic2 <- topic2 %>%
  left_join(senti_dic, by = "word") %>%
  mutate(polarity = ifelse(is.na(polarity), 0, polarity)) # 사전에 없는 단어의 점수는 0

topic2 %>% 
  dplyr::select(word, polarity)
## # A tibble: 81,374 x 2
##    word       polarity
##    <chr>         <dbl>
##  1 업데이트          0
##  2 이후              0
##  3 쿠폰들에          0
##  4 최저요금          0
##  5 생긴              0
##  6 너무              0
##  7 불편하고요        0
##  8 서비스하는        0
##  9 앱과              0
## 10 영업점의          0
## # ... with 81,364 more rows
# 감정분류
topic2 <- topic2 %>%
  mutate(sentiment = ifelse(polarity ==2, "pos",
                            ifelse(polarity == -2, "neg", "neu")))

topic2 %>%
  count(sentiment)
## # A tibble: 3 x 2
##   sentiment     n
##   <chr>     <int>
## 1 neg         809
## 2 neu       80060
## 3 pos         505
# 긍정/부정 상위 10개 단어보기
top10_sentiment2 <- topic2 %>%
  filter(sentiment != "neu") %>% # 중립 단어 제외
  count(sentiment, word) %>%
  group_by(sentiment) %>%
  slice_max(n, n = 10) %>% print(n=Inf) # 중복 허용
## # A tibble: 20 x 3
## # Groups:   sentiment [2]
##    sentiment word           n
##    <chr>     <chr>      <int>
##  1 neg       어려운       165
##  2 neg       힘든         163
##  3 neg       못하게        61
##  4 neg       못하고        44
##  5 neg       불편하고      44
##  6 neg       비싼          36
##  7 neg       죄송합니다    36
##  8 neg       불평          34
##  9 neg       힘들게        22
## 10 neg       나쁘고        21
## 11 pos       편하게        49
## 12 pos       좋은          48
## 13 pos       이익을        38
## 14 pos       이득을        36
## 15 pos       좋게          36
## 16 pos       사랑하는      33
## 17 pos       편리하고      31
## 18 pos       강추          30
## 19 pos       편하고        29
## 20 pos       용감히        25
# 막대 그래프 그리기
top10_sentiment2 %>% 
  ggplot(aes(x = reorder(word, n),
             y = n,
             fill = sentiment)) +
  geom_col() +
  coord_flip() +
  geom_text(aes(label = n), hjust = -0.1,
            color = "dark grey", size=6) +
  facet_wrap(~ sentiment, scales = "free") +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.25))) +
  labs(x = NULL,y = "빈도수 (n)", title = "TOPIC 2에서 자주 사용된 감정단어 ") +
  theme(text = element_text(size=25))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))

2-2) 토픽2의 전체적인 감정 경향 구하기

# 리뷰별 감정 점수 
score_comment2 <- topic2 %>%
  group_by(id, reply) %>%
  summarise(score = sum(polarity)) %>%
  ungroup()
## `summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
# 긍정 점수가 높은 리뷰보기 
score_comment2 %>%
  select(score, reply) %>% 
  arrange(-score)
## # A tibble: 479 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1    76 오픈서비스로 바뀐 이후 득인 사장님과 실인 사장님의 비율이 같으면 뭐합~ 
##  2    75 배달의민족이라는 어플이름을쓰는게혐오감을 줄정도임 배달의민족은 무슨 ~ 
##  3    57 우리는 배달의민족 운운하며 애국심 마케팅하던 기업이 다같이 힘든 이 시~ 
##  4    54 더 편하고 편해졌고 편하게 해주세요 많이 좋아 졌네요 좋지만 더 좋아지려~
##  5    48 그동안 잘이용했는데 이번사건은 너무 한거 같아요 더군다나 배달앱 최초로~
##  6    42 자영업자 소비자간 사이에서 아무런 노동없이 등골빼먹는 대한민국 기업이~ 
##  7    40 와 이거 맛있는거 진짜많아요 강추 강추 안까면 손해 입니다 이거 짱이에요~
##  8    37 대형 가게든 소형 가게든 깃발 제한을 두면 될것을 한업소에 개정도로 애초~
##  9    36 고생은 장사하는 분들이 다 하는데 하는 역할과 제공하는 가치에 비해 너무~
## 10    33 지방이라 그런지는 모르겠지만 제 단골매장들은 오픈서비스 안했네요 어차~ 
## # ... with 469 more rows
# 부정 점수가 높은 리뷰보기
score_comment2 %>%
  select(score, reply) %>% 
  arrange(score)
## # A tibble: 479 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1  -144 음식점 리스트 중 수수료 가장 비싼 오픈리스트 기존 랜덤 개가 최상단에 ~ 
##  2   -84 배달의 민족 배달의 게르만 배신의 민족 메뉴판만 쓰다 버리겠습니다 그동~ 
##  3   -78 잘되길 바라고 돈 쓰면서 진행한 이벤트겠지만 덕분에 요기요로 넘어갑니다~
##  4   -70 요기요한테 인수당하고 요기요 쓰라는거 같네요 배달통 배민 둘다 네트워크~
##  5   -68 업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고요 서비스하는 앱~ 
##  6   -63 별 하나도 아까움 편리한것도 좋지만 독일에서 인수하더니 미쳐돌아감 편하~
##  7   -63 배민 그만 쓰렵니다 안그래도 모두가 어려운 이 시기에 돈에 눈이 멀어서 ~ 
##  8   -46 울산대서 장사하고 있는 개인사업자입니다 수수료 프로 인상 그인상으로 인~
##  9   -44 자영업자들과 상생하기보단 독과점 이용해서 수수료 올리는데 크게 실망스~ 
## 10   -40 우선 배달업체 광고가 너무 많습니다 두번째는 주문직전 주소바꾸기 안되는~
## # ... with 469 more rows
# 감정 점수 빈도 
# 전체적으로 0점이 부여된 리뷰이 가장 많고, 긍정과 부정의 양 극단으로 갈 수록 빈도가 감소함
score_comment2 %>%
  count(score)
## # A tibble: 58 x 2
##    score     n
##    <dbl> <int>
##  1  -144     1
##  2   -84     1
##  3   -78     1
##  4   -70     1
##  5   -68     1
##  6   -63     2
##  7   -46     1
##  8   -44     1
##  9   -40     1
## 10   -34     2
## # ... with 48 more rows
# 감정 분류하기
score_comment2 <- score_comment2 %>%
  mutate(sentiment = ifelse(score >= 1, "pos",
                            ifelse(score <= -1, "neg", "neu")))

# 감정 빈도 및 비율 구하기
freq_score2 <- score_comment2 %>%
  count(sentiment) %>%
  mutate(ratio = n/sum(n)*100) %>% print()
## # A tibble: 3 x 3
##   sentiment     n ratio
##   <chr>     <int> <dbl>
## 1 neg          70  14.6
## 2 neu         359  74.9
## 3 pos          50  10.4
# 막대 그래프 만들기
ggplot(freq_score2, aes(x = sentiment, y = n, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = n), vjust = -0.3, size=20) +
  scale_x_discrete(limits = c("pos", "neu", "neg"))+ # 축 순서 정하기
  theme(legend.box.background = element_rect(fill = "pink"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "감정 단어 유형", y = "빈도수 (n)", title = "TOPIC 2에서 사용된 감정 단어 유형")+
  theme(text = element_text(size=40))

# 비율 누적 막대그래프 만들기 - 감정비율 표현
# 더미 변수 생성
freq_score2$dummy <- 0

ggplot(freq_score2, aes(x = dummy, y = ratio, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = paste0(round(ratio, 1), "%")), # % 표시
            position = position_stack(vjust = 0.5), # 가운데에 텍스트 표시
            size=20) +
  theme(axis.title.x = element_blank(), # x축 이름 삭제
        axis.text.x = element_blank(), # x축 값 삭제
        axis.ticks.x = element_blank())+ # x축 값 삭제
  theme(legend.box.background = element_rect(fill = "skyblue"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(y = "비율 (총 100%)", title = "TOPIC 2에서 사용된 감정 단어 유형-비율")+
  theme(text = element_text(size=40))

2-3) 토픽2의 감정 범주 (긍정 /부정) 별 많이 사용되는 단어

# score_comment를 토큰화 진행
comment2 <- score_comment2 %>%
  unnest_tokens(input = reply,
                output = word,
                token = "words", # extractNoun이라고 지정할 경우 명사만 나옴. 동사도 나와야하므로 그냥 word를 해줌
                drop = F) %>%
  filter(str_detect(word, "[가-힣]") & # 한글 추출
           str_count(word) >= 2) # 두 글자 이상 추출
head(comment2)
## # A tibble: 6 x 5
##      id reply                                              score sentiment word 
##   <int> <chr>                                              <dbl> <chr>     <chr>
## 1     1 업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편~   -68 neg       업데~
## 2     1 업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편~   -68 neg       이후 
## 3     1 업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편~   -68 neg       쿠폰~
## 4     1 업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편~   -68 neg       최저~
## 5     1 업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편~   -68 neg       생긴 
## 6     1 업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편~   -68 neg       너무
# 감정 및 단어별 빈도 구하기 
freq_word2 <- comment2 %>%
  filter(str_count(word) >= 2) %>% # 2번 이상 등장하는 단어만
  count(sentiment, word, sort = T) %>% print()
## # A tibble: 4,224 x 3
##    sentiment word           n
##    <chr>     <chr>      <int>
##  1 neu       수수료       101
##  2 neg       수수료        29
##  3 neu       배민          28
##  4 neu       이제          19
##  5 neu       너무          18
##  6 neu       삭제합니다    18
##  7 neu       정말          18
##  8 neg       배민          15
##  9 neu       그냥          15
## 10 neu       시국에        15
## # ... with 4,214 more rows
# 긍정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word2 %>%
  filter(sentiment == "pos")
## # A tibble: 697 x 3
##    sentiment word           n
##    <chr>     <chr>      <int>
##  1 pos       수수료        11
##  2 pos       너무           8
##  3 pos       편하고         6
##  4 pos       편하게         5
##  5 pos       다른           4
##  6 pos       많이           4
##  7 pos       오픈서비스     4
##  8 pos       좋아요         4
##  9 pos       좋은           4
## 10 pos       좋음           4
## # ... with 687 more rows
# 부정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word2 %>%
  filter(sentiment == "neg")
## # A tibble: 1,032 x 3
##    sentiment word         n
##    <chr>     <chr>    <int>
##  1 neg       수수료      29
##  2 neg       배민        15
##  3 neg       어려운      13
##  4 neg       힘든        12
##  5 neg       시기에      10
##  6 neg       이런         7
##  7 neg       이제         7
##  8 neg       그동안       6
##  9 neg       너무         6
## 10 neg       수수료를     6
## # ... with 1,022 more rows
# 로그오즈비 계산하기
comment_wide1 <- freq_word2 %>%
  filter(sentiment != "neu") %>%
  pivot_wider(names_from = sentiment, # sentiment의 범주를 변수로 사용
              values_from = n,
              values_fill = list(n = 0)) %>% print() # 단어 없으면 0
## # A tibble: 1,619 x 3
##    word       neg   pos
##    <chr>    <int> <int>
##  1 수수료      29    11
##  2 배민        15     2
##  3 어려운      13     0
##  4 힘든        12     1
##  5 시기에      10     0
##  6 너무         6     8
##  7 이런         7     2
##  8 이제         7     2
##  9 그동안       6     1
## 10 수수료를     6     1
## # ... with 1,609 more rows
# 로그 오즈비 구하는 공식
comment_wide1 <- comment_wide1 %>%
  mutate(log_RR = log(((pos + 1) / (sum(pos + 1))) / # pos에서의 단어의 비중
                        ((neg + 1) / (sum(neg + 1))))) # neg에서의 단어의 비중 => 에 로그 취한값
comment_wide1
## # A tibble: 1,619 x 4
##    word       neg   pos log_RR
##    <chr>    <int> <int>  <dbl>
##  1 수수료      29    11 -0.736
##  2 배민        15     2 -1.49 
##  3 어려운      13     0 -2.46 
##  4 힘든        12     1 -1.69 
##  5 시기에      10     0 -2.22 
##  6 너무         6     8  0.432
##  7 이런         7     2 -0.800
##  8 이제         7     2 -0.800
##  9 그동안       6     1 -1.07 
## 10 수수료를     6     1 -1.07 
## # ... with 1,609 more rows
# 로그오즈비가 가장 큰 단어 10개 추출 
top10_topic2 <- comment_wide1 %>%
  group_by(sentiment = ifelse(log_RR > 0, "pos", "neg")) %>%
  slice_max(abs(log_RR), n = 10, with_ties = F) # 로그RR 동점 단어 제외
top10_topic2
## # A tibble: 20 x 5
## # Groups:   sentiment [2]
##    word         neg   pos log_RR sentiment
##    <chr>      <int> <int>  <dbl> <chr>    
##  1 어려운        13     0  -2.46 neg      
##  2 시기에        10     0  -2.22 neg      
##  3 힘든          12     1  -1.69 neg      
##  4 배민          15     2  -1.49 neg      
##  5 앞으로         4     0  -1.43 neg      
##  6 오픈리스트     4     0  -1.43 neg      
##  7 요기요         4     0  -1.43 neg      
##  8 이시국에       4     0  -1.43 neg      
##  9 진짜           4     0  -1.43 neg      
## 10 게르만         3     0  -1.21 neg      
## 11 편하고         0     6   2.13 pos      
## 12 좋음           0     4   1.79 pos      
## 13 강추           0     3   1.57 pos      
## 14 깃발           0     3   1.57 pos      
## 15 비해           0     3   1.57 pos      
## 16 수수료가       0     3   1.57 pos      
## 17 어떻게         0     3   1.57 pos      
## 18 적립이         0     3   1.57 pos      
## 19 편하게         1     5   1.28 pos      
## 20 가게든         0     2   1.28 pos
#막대 그래프 그리기

ggplot(top10_topic2, aes(x = reorder(word, log_RR), y = log_RR, fill = sentiment)) +
  geom_col() +
  coord_flip() +
  labs(x = NULL) +
  theme(text = element_text(size=10))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "", y = "y는 로그-오즈비 (logRR)", title = "긍정/부정 리뷰에서 자주 사용된 단어", subtitle="TOPIC 2")+
  theme(text = element_text(size=25))

3-1) 토픽3의 최빈 단어별 감정분석

# 토픽3 선택
topic3<-word_baemin %>% 
  filter(topic==3) %>% 
  select(topic, id, word, reply ) %>% print()
## # A tibble: 65,642 x 4
##    topic    id word         reply                                                
##    <int> <int> <chr>        <chr>                                                
##  1     3     2 별이         별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데이터~
##  2     3     2 마이너스는   별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데이터~
##  3     3     2 없어서       별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데이터~
##  4     3     2 줬습니다     별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데이터~
##  5     3     2 탈퇴할려고   별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데이터~
##  6     3     2 데이터       별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데이터~
##  7     3     2 써가면서     별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데이터~
##  8     3     2 다시         별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데이터~
##  9     3     2 설치했습니다 별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데이터~
## 10     3     2 대신에       별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데이터~
## # ... with 65,632 more rows
# 감정점수 부여
topic3 <- topic3 %>%
  left_join(senti_dic, by = "word") %>%
  mutate(polarity = ifelse(is.na(polarity), 0, polarity)) # 사전에 없는 단어의 점수는 0

topic3 %>% 
  dplyr::select(word, polarity)
## # A tibble: 65,642 x 2
##    word         polarity
##    <chr>           <dbl>
##  1 별이                0
##  2 마이너스는          0
##  3 없어서             -1
##  4 줬습니다            0
##  5 탈퇴할려고          0
##  6 데이터              0
##  7 써가면서            0
##  8 다시                0
##  9 설치했습니다        0
## 10 대신에              0
## # ... with 65,632 more rows
# 감정분류
topic3 <- topic3 %>%
  mutate(sentiment = ifelse(polarity ==2, "pos",
                            ifelse(polarity == -2, "neg", "neu")))

topic3 %>%
  count(sentiment)
## # A tibble: 3 x 2
##   sentiment     n
##   <chr>     <int>
## 1 neg         506
## 2 neu       64745
## 3 pos         391
# 긍정/부정 상위 10개 단어보기
top10_sentiment3 <- topic3 %>%
  filter(sentiment != "neu") %>% # 중립 단어 제외
  count(sentiment, word) %>%
  group_by(sentiment) %>%
  slice_max(n, n = 10) %>% print(n=Inf) # 중복 허용
## # A tibble: 21 x 3
## # Groups:   sentiment [2]
##    sentiment word         n
##    <chr>     <chr>    <int>
##  1 neg       어려운      90
##  2 neg       못하고      53
##  3 neg       실망        46
##  4 neg       힘든        36
##  5 neg       싫어서      31
##  6 neg       불만이      29
##  7 neg       나쁜        26
##  8 neg       부정적인    25
##  9 neg       어려워서    20
## 10 neg       최악의      20
## 11 neg       화나고      20
## 12 pos       좋은        87
## 13 pos       편하게      37
## 14 pos       편하고      33
## 15 pos       멋지다      25
## 16 pos       착한        25
## 17 pos       최고        23
## 18 pos       편리하고    22
## 19 pos       장점을      21
## 20 pos       좋아서      19
## 21 pos       참신한      19
# 막대 그래프 그리기
top10_sentiment3 %>% 
  ggplot(aes(x = reorder(word, n),
             y = n,
             fill = sentiment)) +
  geom_col() +
  coord_flip() +
  geom_text(aes(label = n), hjust = -0.1,
            color = "dark grey", size=6) +
  facet_wrap(~ sentiment, scales = "free") +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.25))) +
  labs(x = NULL,y = "빈도수 (n)", title = "TOPIC 3에서 자주 사용된 감정단어 ") +
  theme(text = element_text(size=25))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))

3-2) 토픽3의 전체적인 감정 경향 구하기

# 리뷰별 감정 점수 
score_comment3 <- topic3 %>%
  group_by(id, reply) %>%
  summarise(score = sum(polarity)) %>%
  ungroup()
## `summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
# 긍정 점수가 높은 리뷰보기 
score_comment3 %>%
  select(score, reply) %>% 
  arrange(-score)
## # A tibble: 459 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1   126 게르만 민족은 한민족과는 의식의 흐름이 다름을 알게 돼었네요 효율적이고~
##  2   100 리뷰등록한거 지워놨네 멋지다 독과점 어플 요기요가 높은수수료로 등골빼~ 
##  3    68 너무 만족하고 있어요 늘 앞서가는 개발 자꾸자꾸 배민 서비스에 대해 곰곰~
##  4    42 배민 시작 때부터 이용했으며 제일 높은 천생연분 등급 인데 여지껏 이 어~ 
##  5    42 복붙대답만 하지마시구요 거리조절기능을 다시 넣으세요 자취방이 구석탱이~
##  6    38 너무 많은 이들이 사용해주고 있나봅니다 참신한 아이디어 다양한 시도로 ~ 
##  7    36 오늘 처음 앱을 깔고 주문해보았는데 편리하고 좋네요 다른 배달앱보면 처~ 
##  8    35 몇달동안 를 유지했던거 같은데 계속되는 생각이 짧아보이는 행보와 굿즈를~
##  9    34 카테고리별 음식 상당히 난잡하네요 야식에 치킨 족발 일식 등등 죄다 들어~
## 10    32 업체와의 상생을 생각하여 좋은 의도로 운영을 했다고 생각이 들어 사용을 ~
## # ... with 449 more rows
# 부정 점수가 높은 리뷰보기
score_comment3 %>%
  select(score, reply) %>% 
  arrange(score)
## # A tibble: 459 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1  -164 오랫동안 자주 이용해서 누적 금액도 많고 등급이었습니다 요즘 갈수록 혜~ 
##  2  -114 외국회사에 회사팔아넘겨 결국은 배달시장을 외국자본에 완전히 종속시켜 ~ 
##  3   -63 배민 그만 쓰렵니다 안그래도 모두가 어려운 이 시기에 돈에 눈이 멀어서 ~ 
##  4   -60 지금처럼 전국적으로 어려워서 상생해야 될 시기에 독일 업체가 배달시장 ~ 
##  5   -58 덕분에 동네 없던배달료도 다 생기고 업주분들 어쩔수없이 가격 올려파는거~
##  6   -52 굳이 이 힘든시기에 정액제에서 정률제로 바꾸는게 기존제도의 어려움 때문~
##  7   -50 부정적인 의견에는 피드백이 없고 혹은 동문서답하는 모습에 환멸감이드네~ 
##  8   -44 업체컴플레인 대처하는 방식부터 미투조롱하는 광고 평소에도 진부하고 재~ 
##  9   -40 우선 배달업체 광고가 너무 많습니다 두번째는 주문직전 주소바꾸기 안되는~
## 10   -31 배달료도 너무 과하고 배달 오는 시간도 제대로 알 수가 없어서 답답한 판~ 
## # ... with 449 more rows
# 감정 점수 빈도 
# 전체적으로 0점이 부여된 리뷰이 가장 많고, 긍정과 부정의 양 극단으로 갈 수록 빈도가 감소함
score_comment3 %>%
  count(score)
## # A tibble: 58 x 2
##    score     n
##    <dbl> <int>
##  1  -164     1
##  2  -114     1
##  3   -63     1
##  4   -60     1
##  5   -58     1
##  6   -52     1
##  7   -50     1
##  8   -44     1
##  9   -40     1
## 10   -31     1
## # ... with 48 more rows
# 감정 분류하기
score_comment3 <- score_comment3 %>%
  mutate(sentiment = ifelse(score >= 1, "pos",
                            ifelse(score <= -1, "neg", "neu")))

# 감정 빈도 및 비율 구하기
freq_score3 <- score_comment3 %>%
  count(sentiment) %>%
  mutate(ratio = n/sum(n)*100) %>% print()
## # A tibble: 3 x 3
##   sentiment     n ratio
##   <chr>     <int> <dbl>
## 1 neg          63  13.7
## 2 neu         345  75.2
## 3 pos          51  11.1
# 막대 그래프 만들기
ggplot(freq_score3, aes(x = sentiment, y = n, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = n), vjust = -0.3, size=20) +
  scale_x_discrete(limits = c("pos", "neu", "neg"))+ # 축 순서 정하기
  theme(legend.box.background = element_rect(fill = "pink"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "감정 단어 유형", y = "빈도수 (n)", title = "TOPIC 3에서 사용된 감정 단어 유형")+
  theme(text = element_text(size=40))

# 비율 누적 막대그래프 만들기 - 감정비율 표현
# 더미 변수 생성
freq_score3$dummy <- 0

ggplot(freq_score3, aes(x = dummy, y = ratio, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = paste0(round(ratio, 1), "%")), # % 표시
            position = position_stack(vjust = 0.5), # 가운데에 텍스트 표시
            size=20) +
  theme(axis.title.x = element_blank(), # x축 이름 삭제
        axis.text.x = element_blank(), # x축 값 삭제
        axis.ticks.x = element_blank())+ # x축 값 삭제
  theme(legend.box.background = element_rect(fill = "skyblue"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(y = "비율 (총 100%)", title = "TOPIC 3에서 사용된 감정 단어 유형-비율")+
  theme(text = element_text(size=40))

3-3) 토픽3의 감정 범주 (긍정 /부정) 별 많이 사용되는 단어

# score_comment를 토큰화 진행
comment3 <- score_comment3 %>%
  unnest_tokens(input = reply,
                output = word,
                token = "words", # extractNoun이라고 지정할 경우 명사만 나옴. 동사도 나와야하므로 그냥 word를 해줌
                drop = F) %>%
  filter(str_detect(word, "[가-힣]") & # 한글 추출
           str_count(word) >= 2) # 두 글자 이상 추출
head(comment3)
## # A tibble: 6 x 5
##      id reply                                             score sentiment word   
##   <int> <chr>                                             <dbl> <chr>     <chr>  
## 1     2 별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데~    -7 neg       별이   
## 2     2 별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데~    -7 neg       마이너~
## 3     2 별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데~    -7 neg       없어서 
## 4     2 별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데~    -7 neg       줬습니~
## 5     2 별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데~    -7 neg       탈퇴할~
## 6     2 별이 마이너스는 없어서 개 줬습니다 탈퇴할려고 데~    -7 neg       데이터
# 감정 및 단어별 빈도 구하기 
freq_word3 <- comment3 %>%
  filter(str_count(word) >= 2) %>% # 2번 이상 등장하는 단어만
  count(sentiment, word, sort = T) %>% print()
## # A tibble: 3,833 x 3
##    sentiment word           n
##    <chr>     <chr>      <int>
##  1 neu       삭제합니다    29
##  2 neu       수수료        29
##  3 neu       삭제          22
##  4 neu       어플          21
##  5 neu       그냥          16
##  6 neu       너무          15
##  7 neu       배민          15
##  8 neu       다시          14
##  9 neu       이제          14
## 10 neu       탈퇴          14
## # ... with 3,823 more rows
# 긍정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word3 %>%
  filter(sentiment == "pos")
## # A tibble: 725 x 3
##    sentiment word       n
##    <chr>     <chr>  <int>
##  1 pos       너무      10
##  2 pos       많이       7
##  3 pos       배민       7
##  4 pos       편하고     6
##  5 pos       다른       5
##  6 pos       어플       5
##  7 pos       좋아요     5
##  8 pos       최고       5
##  9 pos       포인트     5
## 10 pos       다시       4
## # ... with 715 more rows
# 부정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word3 %>%
  filter(sentiment == "neg")
## # A tibble: 824 x 3
##    sentiment word           n
##    <chr>     <chr>      <int>
##  1 neg       시기에         8
##  2 neg       어려운         8
##  3 neg       어플           8
##  4 neg       배민           7
##  5 neg       초심을         7
##  6 neg       삭제           6
##  7 neg       수수료         6
##  8 neg       아깝다         6
##  9 neg       합니다         6
## 10 neg       삭제합니다     5
## # ... with 814 more rows
# 로그오즈비 계산하기
comment_wide1 <- freq_word3 %>%
  filter(sentiment != "neu") %>%
  pivot_wider(names_from = sentiment, # sentiment의 범주를 변수로 사용
              values_from = n,
              values_fill = list(n = 0)) %>% print() # 단어 없으면 0
## # A tibble: 1,466 x 3
##    word     pos   neg
##    <chr>  <int> <int>
##  1 너무      10     3
##  2 시기에     0     8
##  3 어려운     0     8
##  4 어플       5     8
##  5 배민       7     7
##  6 초심을     0     7
##  7 많이       7     4
##  8 삭제       1     6
##  9 수수료     4     6
## 10 아깝다     0     6
## # ... with 1,456 more rows
# 로그 오즈비 구하는 공식
comment_wide1 <- comment_wide1 %>%
  mutate(log_RR = log(((pos + 1) / (sum(pos + 1))) / # pos에서의 단어의 비중
                        ((neg + 1) / (sum(neg + 1))))) # neg에서의 단어의 비중 => 에 로그 취한값
comment_wide1
## # A tibble: 1,466 x 4
##    word     pos   neg  log_RR
##    <chr>  <int> <int>   <dbl>
##  1 너무      10     3  1.07  
##  2 시기에     0     8 -2.14  
##  3 어려운     0     8 -2.14  
##  4 어플       5     8 -0.344 
##  5 배민       7     7  0.0613
##  6 초심을     0     7 -2.02  
##  7 많이       7     4  0.531 
##  8 삭제       1     6 -1.19  
##  9 수수료     4     6 -0.275 
## 10 아깝다     0     6 -1.88  
## # ... with 1,456 more rows
# 로그오즈비가 가장 큰 단어 10개 추출 
top10_topic3 <- comment_wide1 %>%
  group_by(sentiment = ifelse(log_RR > 0, "pos", "neg")) %>%
  slice_max(abs(log_RR), n = 10, with_ties = F) # 로그RR 동점 단어 제외
top10_topic3
## # A tibble: 20 x 5
## # Groups:   sentiment [2]
##    word       pos   neg log_RR sentiment
##    <chr>    <int> <int>  <dbl> <chr>    
##  1 시기에       0     8  -2.14 neg      
##  2 어려운       0     8  -2.14 neg      
##  3 초심을       0     7  -2.02 neg      
##  4 아깝다       0     6  -1.88 neg      
##  5 시국에       0     5  -1.73 neg      
##  6 힘든         0     5  -1.73 neg      
##  7 요즘         0     4  -1.55 neg      
##  8 잃은         0     4  -1.55 neg      
##  9 최악의       0     4  -1.55 neg      
## 10 모두가       0     3  -1.32 neg      
## 11 편하고       6     0   2.01 pos      
## 12 좋아요       5     0   1.85 pos      
## 13 최고         5     0   1.85 pos      
## 14 포인트       5     0   1.85 pos      
## 15 있고         4     0   1.67 pos      
## 16 있는데       4     0   1.67 pos      
## 17 좋겠어요     4     0   1.67 pos      
## 18 좋은         4     0   1.67 pos      
## 19 편리하고     4     0   1.67 pos      
## 20 같습니다     3     0   1.45 pos
#막대 그래프 그리기

ggplot(top10_topic3, aes(x = reorder(word, log_RR), y = log_RR, fill = sentiment)) +
  geom_col() +
  coord_flip() +
  labs(x = NULL) +
  theme(text = element_text(size=10))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "", y = "y는 로그-오즈비 (logRR)", title = "긍정/부정 리뷰에서 자주 사용된 단어", subtitle="TOPIC 3")+
  theme(text = element_text(size=25))

4-1) 토픽4의 최빈 단어별 감정분석

# 토픽4 선택
topic4<-word_baemin %>% 
  filter(topic==4) %>% 
  select(topic, id, word, reply ) %>% print()
## # A tibble: 122,044 x 4
##    topic    id word     reply                                                    
##    <int> <int> <chr>    <chr>                                                    
##  1     4     3 배민     배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  2     4     3 년동안   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  3     4     3 썼는데   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  4     4     3 월부터   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  5     4     3 정책이   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  6     4     3 불편하게 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  7     4     3 바꿨네요 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  8     4     3 자영업자 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  9     4     3 수수료도 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
## 10     4     3 그렇고   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
## # ... with 122,034 more rows
# 감정점수 부여
topic4 <- topic4 %>%
  left_join(senti_dic, by = "word") %>%
  mutate(polarity = ifelse(is.na(polarity), 0, polarity)) # 사전에 없는 단어의 점수는 0

topic4 %>% 
  dplyr::select(word, polarity)
## # A tibble: 122,044 x 2
##    word     polarity
##    <chr>       <dbl>
##  1 배민            0
##  2 년동안          0
##  3 썼는데          0
##  4 월부터          0
##  5 정책이          0
##  6 불편하게       -2
##  7 바꿨네요        0
##  8 자영업자        0
##  9 수수료도        0
## 10 그렇고          0
## # ... with 122,034 more rows
# 감정분류
topic4 <- topic4 %>%
  mutate(sentiment = ifelse(polarity ==2, "pos",
                            ifelse(polarity == -2, "neg", "neu")))

topic4 %>%
  count(sentiment)
## # A tibble: 3 x 2
##   sentiment      n
##   <chr>      <int>
## 1 neg          831
## 2 neu       120197
## 3 pos         1016
# 긍정/부정 상위 10개 단어보기
top10_sentiment4 <- topic4 %>%
  filter(sentiment != "neu") %>% # 중립 단어 제외
  count(sentiment, word) %>%
  group_by(sentiment) %>%
  slice_max(n, n = 10) %>% print(n=Inf) # 중복 허용
## # A tibble: 20 x 3
## # Groups:   sentiment [2]
##    sentiment word         n
##    <chr>     <chr>    <int>
##  1 neg       불편        94
##  2 neg       못하고      85
##  3 neg       못하게      75
##  4 neg       불편하게    65
##  5 neg       잘못        51
##  6 neg       불편할      43
##  7 neg       힘들게      35
##  8 neg       어려울      34
##  9 neg       최악의      32
## 10 neg       장애        31
## 11 pos       좋을       169
## 12 pos       편리하고   103
## 13 pos       개선        72
## 14 pos       편하고      68
## 15 pos       맛집        65
## 16 pos       좋은        62
## 17 pos       만족        47
## 18 pos       편하게      43
## 19 pos       이득을      40
## 20 pos       이익을      40
# 막대 그래프 그리기
top10_sentiment4 %>% 
  ggplot(aes(x = reorder(word, n),
             y = n,
             fill = sentiment)) +
  geom_col() +
  coord_flip() +
  geom_text(aes(label = n), hjust = -0.1,
            color = "dark grey", size=6) +
  facet_wrap(~ sentiment, scales = "free") +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.25))) +
  labs(x = NULL,y = "빈도수 (n)", title = "TOPIC 4에서 자주 사용된 감정단어 ") +
  theme(text = element_text(size=25))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))

4-2) 토픽4의 전체적인 감정 경향 구하기

# 리뷰별 감정 점수 
score_comment4 <- topic4 %>%
  group_by(id, reply) %>%
  summarise(score = sum(polarity)) %>%
  ungroup()
## `summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
# 긍정 점수가 높은 리뷰보기 
score_comment4 %>%
  select(score, reply) %>% 
  arrange(-score)
## # A tibble: 454 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1   160 배달의민족 게르만민족 리뷰없어져 다시 쓰는데 짱남 점 준 리뷰들에 좋아~ 
##  2   150 배달을 많이 시켜 먹는 입장으로써 배달 앱중엔 단연 최고인거 같습니다 편~
##  3   116 편의기능 이벤트는 등등의 앱의 모든 부분은 정말정말 만족합니다 그러나 ~ 
##  4   102 깔끔한 인터페이스와 업체수로 올킬 여러 배달 어플들이 있지만 배민에만 ~ 
##  5    96 이걸로 먹고사는 많은 사람들이 있는데 리뷰 하나에 기뻐하고 하루종일 신~ 
##  6    87 전 진짜 지금까지 만족하고 쓰고 있습니다 진짜 너무 좋아요 요기요 쓰다가~
##  7    84 원래 잘 쓰고 있는데 아쉬운점이 있어서 리뷰남깁니다 요즘 리뷰이벤트로 ~ 
##  8    82 만족하고 잘 쓰고 있는 사람입니다 애정하며 쓰는 입장에서 건의해봐여 최~ 
##  9    74 전부다 좋은데 굳이 아쉬운점을 적어보자면 배달 주문후 맛있게 리뷰를 썼~ 
## 10    68 리뷰가 너무 형편없어요 지난 달 작년 이거밖에 없네요 주문한 날짜를 정확~
## # ... with 444 more rows
# 부정 점수가 높은 리뷰보기
score_comment4 %>%
  select(score, reply) %>% 
  arrange(score)
## # A tibble: 454 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1  -176 이거 진짜 리뷰작성하는거 개선해야함 내가 빨리먹고 빨리 리뷰쓰겠다는데 ~
##  2  -144 카드결제할때 엘포인트사용시 패스앱으로 자동넘어가기좀 없애주세요 엘포~ 
##  3  -102 원래 요 를 주로 사용하는데 배민에는 다른 가게 입점이 되어있을까 싶어 ~ 
##  4   -84 인터페이스가 넘나 불편하네요 검색도 못하겟고 매장리스트도 중복되고 이~ 
##  5   -80 잘 쓰고는 있는데 주문요청사항을 적으려 하니까 계속 작성불가능한 단어가~
##  6   -69 다시는 우리민족운운 하지마라 이 어려운시국에 자영업자들 숨통을 트여줄~ 
##  7   -68 오랫동안 유지하고 있는 유저입니다 어플 매우 잘 쓰고 있는데요 몇 년간 ~ 
##  8   -62 아니 이것저것 다 떠나서 업장들 리뷰 별점 작업 안막으십니까 아니면 쿠팡~
##  9   -58 리뷰작성시 미리찍어놨던 사진을 업로드하지 못하고 미리찍은 사진만 갤러~ 
## 10   -55 업데이트 후 배민페이 등록과 카드결제방식에 심각한 불편 결국 등록 포기~ 
## # ... with 444 more rows
# 감정 점수 빈도 
# 전체적으로 0점이 부여된 리뷰이 가장 많고, 긍정과 부정의 양 극단으로 갈 수록 빈도가 감소함
score_comment4 %>%
  count(score)
## # A tibble: 77 x 2
##    score     n
##    <dbl> <int>
##  1  -176     1
##  2  -144     1
##  3  -102     1
##  4   -84     1
##  5   -80     1
##  6   -69     1
##  7   -68     1
##  8   -62     1
##  9   -58     1
## 10   -55     1
## # ... with 67 more rows
# 감정 분류하기
score_comment4 <- score_comment4 %>%
  mutate(sentiment = ifelse(score >= 1, "pos",
                            ifelse(score <= -1, "neg", "neu")))

# 감정 빈도 및 비율 구하기
freq_score4 <- score_comment4 %>%
  count(sentiment) %>%
  mutate(ratio = n/sum(n)*100) %>% print()
## # A tibble: 3 x 3
##   sentiment     n ratio
##   <chr>     <int> <dbl>
## 1 neg          62  13.7
## 2 neu         304  67.0
## 3 pos          88  19.4
# 막대 그래프 만들기
ggplot(freq_score4, aes(x = sentiment, y = n, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = n), vjust = -0.3, size=20) +
  scale_x_discrete(limits = c("pos", "neu", "neg"))+ # 축 순서 정하기
  theme(legend.box.background = element_rect(fill = "pink"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "감정 단어 유형", y = "빈도수 (n)", title = "TOPIC 4에서 사용된 감정 단어 유형")+
  theme(text = element_text(size=40))

# 비율 누적 막대그래프 만들기 - 감정비율 표현
# 더미 변수 생성
freq_score4$dummy <- 0

ggplot(freq_score4, aes(x = dummy, y = ratio, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = paste0(round(ratio, 1), "%")), # % 표시
            position = position_stack(vjust = 0.5), # 가운데에 텍스트 표시
            size=20) +
  theme(axis.title.x = element_blank(), # x축 이름 삭제
        axis.text.x = element_blank(), # x축 값 삭제
        axis.ticks.x = element_blank())+ # x축 값 삭제
  theme(legend.box.background = element_rect(fill = "skyblue"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(y = "비율 (총 100%)", title = "TOPIC 4에서 사용된 감정 단어 유형-비율")+
  theme(text = element_text(size=40))

4-3) 토픽4의 감정 범주 (긍정 /부정) 별 많이 사용되는 단어

# score_comment를 토큰화 진행
comment4 <- score_comment4 %>%
  unnest_tokens(input = reply,
                output = word,
                token = "words", # extractNoun이라고 지정할 경우 명사만 나옴. 동사도 나와야하므로 그냥 word를 해줌
                drop = F) %>%
  filter(str_detect(word, "[가-힣]") & # 한글 추출
           str_count(word) >= 2) # 두 글자 이상 추출
head(comment4)
## # A tibble: 6 x 5
##      id reply                                              score sentiment word  
##   <int> <chr>                                              <dbl> <chr>     <chr> 
## 1     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       배민  
## 2     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       년동안
## 3     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       썼는데
## 4     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       월부터
## 5     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       정책이
## 6     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       불편~
# 감정 및 단어별 빈도 구하기 
freq_word4 <- comment4 %>%
  filter(str_count(word) >= 2) %>% # 2번 이상 등장하는 단어만
  count(sentiment, word, sort = T) %>% print()
## # A tibble: 5,023 x 3
##    sentiment word         n
##    <chr>     <chr>    <int>
##  1 neu       리뷰        24
##  2 neg       리뷰        21
##  3 neu       너무        21
##  4 neu       사진        21
##  5 neu       사진이      20
##  6 neu       좋겠어요    20
##  7 pos       좋아요      20
##  8 pos       너무        18
##  9 neu       좋아요      17
## 10 neu       다시        16
## # ... with 5,013 more rows
# 긍정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word4 %>%
  filter(sentiment == "pos")
## # A tibble: 1,216 x 3
##    sentiment word         n
##    <chr>     <chr>    <int>
##  1 pos       좋아요      20
##  2 pos       너무        18
##  3 pos       편리하고    16
##  4 pos       편하고      13
##  5 pos       있습니다    11
##  6 pos       리뷰        10
##  7 pos       같아요       9
##  8 pos       기능이       9
##  9 pos       다른         8
## 10 pos       리뷰를       8
## # ... with 1,206 more rows
# 부정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word4 %>%
  filter(sentiment == "neg")
## # A tibble: 1,120 x 3
##    sentiment word         n
##    <chr>     <chr>    <int>
##  1 neg       리뷰        21
##  2 neg       다른         9
##  3 neg       너무         6
##  4 neg       바로         6
##  5 neg       불편         6
##  6 neg       그리고       5
##  7 neg       아깝다       5
##  8 neg       없어서       5
##  9 neg       있습니다     5
## 10 neg       가게         4
## # ... with 1,110 more rows
# 로그오즈비 계산하기
comment_wide1 <- freq_word4 %>%
  filter(sentiment != "neu") %>%
  pivot_wider(names_from = sentiment, # sentiment의 범주를 변수로 사용
              values_from = n,
              values_fill = list(n = 0)) %>% print() # 단어 없으면 0
## # A tibble: 2,160 x 3
##    word       neg   pos
##    <chr>    <int> <int>
##  1 리뷰        21    10
##  2 좋아요       1    20
##  3 너무         6    18
##  4 편리하고     0    16
##  5 편하고       0    13
##  6 있습니다     5    11
##  7 다른         9     8
##  8 같아요       3     9
##  9 기능이       3     9
## 10 리뷰를       2     8
## # ... with 2,150 more rows
# 로그 오즈비 구하는 공식
comment_wide1 <- comment_wide1 %>%
  mutate(log_RR = log(((pos + 1) / (sum(pos + 1))) / # pos에서의 단어의 비중
                        ((neg + 1) / (sum(neg + 1))))) # neg에서의 단어의 비중 => 에 로그 취한값
comment_wide1
## # A tibble: 2,160 x 4
##    word       neg   pos log_RR
##    <chr>    <int> <int>  <dbl>
##  1 리뷰        21    10 -0.775
##  2 좋아요       1    20  2.27 
##  3 너무         6    18  0.917
##  4 편리하고     0    16  2.75 
##  5 편하고       0    13  2.56 
##  6 있습니다     5    11  0.611
##  7 다른         9     8 -0.187
##  8 같아요       3     9  0.834
##  9 기능이       3     9  0.834
## 10 리뷰를       2     8  1.02 
## # ... with 2,150 more rows
# 로그오즈비가 가장 큰 단어 10개 추출 
top10_topic4 <- comment_wide1 %>%
  group_by(sentiment = ifelse(log_RR > 0, "pos", "neg")) %>%
  slice_max(abs(log_RR), n = 10, with_ties = F) # 로그RR 동점 단어 제외
top10_topic4
## # A tibble: 20 x 5
## # Groups:   sentiment [2]
##    word         neg   pos log_RR sentiment
##    <chr>      <int> <int>  <dbl> <chr>    
##  1 바로           6     0  -2.03 neg      
##  2 불편           6     0  -2.03 neg      
##  3 아깝다         5     0  -1.87 neg      
##  4 돈을           4     0  -1.69 neg      
##  5 시국에         4     0  -1.69 neg      
##  6 이거           4     0  -1.69 neg      
##  7 작성           4     0  -1.69 neg      
##  8 많습니다       3     0  -1.47 neg      
##  9 메뉴에         3     0  -1.47 neg      
## 10 못하고         3     0  -1.47 neg      
## 11 편리하고       0    16   2.75 pos      
## 12 편하고         0    13   2.56 pos      
## 13 좋아요         1    20   2.27 pos      
## 14 좋은           0     8   2.12 pos      
## 15 좋을           0     8   2.12 pos      
## 16 편리하게       0     5   1.71 pos      
## 17 같은           0     4   1.53 pos      
## 18 개선           0     4   1.53 pos      
## 19 요청사항을     0     4   1.53 pos      
## 20 음식점이       0     4   1.53 pos
#막대 그래프 그리기

ggplot(top10_topic4, aes(x = reorder(word, log_RR), y = log_RR, fill = sentiment)) +
  geom_col() +
  coord_flip() +
  labs(x = NULL) +
  theme(text = element_text(size=10))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "", y = "y는 로그-오즈비 (logRR)", title = "긍정/부정 리뷰에서 자주 사용된 단어", subtitle="TOPIC 4")+
  theme(text = element_text(size=25))

5-1) 토픽5의 최빈 단어별 감정분석

# 토픽5 선택
topic5<-word_baemin %>% 
  filter(topic==5) %>% 
  select(topic, id, word, reply ) %>% print()
## # A tibble: 100,413 x 4
##    topic    id word                   reply                                     
##    <int> <int> <chr>                  <chr>                                     
##  1     5    16 원래                   원래 의도했던 배민이 없어졌음 주문많은순 ~
##  2     5    16 의도했던               원래 의도했던 배민이 없어졌음 주문많은순 ~
##  3     5    16 배민이                 원래 의도했던 배민이 없어졌음 주문많은순 ~
##  4     5    16 없어졌음               원래 의도했던 배민이 없어졌음 주문많은순 ~
##  5     5    16 주문많은순             원래 의도했던 배민이 없어졌음 주문많은순 ~
##  6     5    16 가서                   원래 의도했던 배민이 없어졌음 주문많은순 ~
##  7     5    16 직접                   원래 의도했던 배민이 없어졌음 주문많은순 ~
##  8     5    16 골라먹는재미도있었는데 원래 의도했던 배민이 없어졌음 주문많은순 ~
##  9     5    16 리뷰                   원래 의도했던 배민이 없어졌음 주문많은순 ~
## 10     5    16 순위못믿겠음           원래 의도했던 배민이 없어졌음 주문많은순 ~
## # ... with 100,403 more rows
# 감정점수 부여
topic5 <- topic5 %>%
  left_join(senti_dic, by = "word") %>%
  mutate(polarity = ifelse(is.na(polarity), 0, polarity)) # 사전에 없는 단어의 점수는 0

topic5 %>% 
  dplyr::select(word, polarity)
## # A tibble: 100,413 x 2
##    word                   polarity
##    <chr>                     <dbl>
##  1 원래                          0
##  2 의도했던                      0
##  3 배민이                        0
##  4 없어졌음                      0
##  5 주문많은순                    0
##  6 가서                          0
##  7 직접                          0
##  8 골라먹는재미도있었는데        0
##  9 리뷰                          0
## 10 순위못믿겠음                  0
## # ... with 100,403 more rows
# 감정분류
topic5 <- topic5 %>%
  mutate(sentiment = ifelse(polarity ==2, "pos",
                            ifelse(polarity == -2, "neg", "neu")))

topic5 %>%
  count(sentiment)
## # A tibble: 3 x 2
##   sentiment     n
##   <chr>     <int>
## 1 neg         674
## 2 neu       99432
## 3 pos         307
# 긍정/부정 상위 10개 단어보기
top10_sentiment5 <- topic5 %>%
  filter(sentiment != "neu") %>% # 중립 단어 제외
  count(sentiment, word) %>%
  group_by(sentiment) %>%
  slice_max(n, n = 10) %>% print(n=Inf) # 중복 허용
## # A tibble: 20 x 3
## # Groups:   sentiment [2]
##    sentiment word           n
##    <chr>     <chr>      <int>
##  1 neg       못하고       129
##  2 neg       죄송하다      85
##  3 neg       화가          80
##  4 neg       잘못          61
##  5 neg       죄송합니다    41
##  6 neg       화나게        36
##  7 neg       최악의        34
##  8 neg       어렵게        33
##  9 neg       불안정한      29
## 10 neg       불편하고      21
## 11 pos       좋고          48
## 12 pos       좋아서        43
## 13 pos       좋을          41
## 14 pos       편하게        37
## 15 pos       좋은          29
## 16 pos       개선          27
## 17 pos       편하고        27
## 18 pos       편리          22
## 19 pos       최고          14
## 20 pos       이득           8
# 막대 그래프 그리기
top10_sentiment5 %>% 
  ggplot(aes(x = reorder(word, n),
             y = n,
             fill = sentiment)) +
  geom_col() +
  coord_flip() +
  geom_text(aes(label = n), hjust = -0.1,
            color = "dark grey", size=6) +
  facet_wrap(~ sentiment, scales = "free") +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.25))) +
  labs(x = NULL,y = "빈도수 (n)", title = "TOPIC 5에서 자주 사용된 감정단어 ") +
  theme(text = element_text(size=25))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))

5-2) 토픽5의 전체적인 감정 경향 구하기

# 리뷰별 감정 점수 
score_comment5 <- topic5 %>%
  group_by(id, reply) %>%
  summarise(score = sum(polarity)) %>%
  ungroup()
## `summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
# 긍정 점수가 높은 리뷰보기 
score_comment5 %>%
  select(score, reply) %>% 
  arrange(-score)
## # A tibble: 393 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1   120 앱은 참 좋고 써보니 고맙기도 합니다 예전엔 가게 열었는지 전화도 해봐야~
##  2    84 다른 배달앱보단 좋아서 자주 사용하고 있습니다 그리고 인분 메뉴은 좋은 ~
##  3    82 만족하고 잘 쓰고 있는 사람입니다 애정하며 쓰는 입장에서 건의해봐여 최~ 
##  4    44 좋아서 자주 쓰고있긴한데 이런상황은 처음임 치킨시키고 치킨이 왔는데 갑~
##  5    38 전 도 여러번 했던 사람입니다 두명이 동시에 한개의 아이디로 각자 핸드폰~
##  6    36 사람들이 총 결제금액 확인하고 현타 먹어서 앱 삭제 반성의 시간을 가지려~
##  7    30 뭐 다른 후기들 보니까 아쉽게도 총 주문금액을 볼 수 없다고만 나오고 일~ 
##  8    28 요기요로 갈아타고나서 보니 배민 넘 불편하네요 최소주문 금액순 정렬 거~ 
##  9    27 한두번도 아니고 누락시키는거에 대한 개선방안 좀 세우세요 누락 여러번 ~ 
## 10    22 개같은 경험 개같은 어플 배달 사고 배달 누락 주문 취소 책임은 뒷전 배달~
## # ... with 383 more rows
# 부정 점수가 높은 리뷰보기
score_comment5 %>%
  select(score, reply) %>% 
  arrange(score)
## # A tibble: 393 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1  -148 별 개 주기도 아깝다 배민오더 시스템에 대해서 매우 기분 나쁘네요 배민오~
##  2  -144 진짜 장난하는것도 아니고 고객센터 연결이 왜 안됩니까 주문하고서 배달시~
##  3   -94 이전부터 어플 오류로 계속 문의했는데 확인이 안된다 전산팀에 확인해보겠~
##  4   -82 처리 미흡 너무느림 환불처리하는데 시간이지나도록 되지않았고 다시전화를~
##  5   -76 한시간 안에 배달 온다더니 한시간 반 지나도 감감무소식이길래 전화했더니~
##  6   -70 총 주문금액 확인이 부터 된다면서요 근데 왜 아직도 최신버전이 이죠 총주~
##  7   -66 저희앞집할머니 식당을하시는데 이번수수료변경정책설명에 난감해하시기에 ~
##  8   -62 분 걸린다길래 주문취소 하려고 주문내역에 들어가면 계속 최신 정보를 불~ 
##  9   -62 진짜 정말 화가 너무 나다못해 분통이 터집니다주문이 취소됬으면 됬다 연~ 
## 10   -48 별하나도 아까움 결제가 안되서 물어보니 매장은 어플에게 물어보라고 하고~
## # ... with 383 more rows
# 감정 점수 빈도 
# 전체적으로 0점이 부여된 리뷰이 가장 많고, 긍정과 부정의 양 극단으로 갈 수록 빈도가 감소함
score_comment5 %>%
  count(score)
## # A tibble: 55 x 2
##    score     n
##    <dbl> <int>
##  1  -148     1
##  2  -144     1
##  3   -94     1
##  4   -82     1
##  5   -76     1
##  6   -70     1
##  7   -66     1
##  8   -62     2
##  9   -48     2
## 10   -40     1
## # ... with 45 more rows
# 감정 분류하기
score_comment5 <- score_comment5 %>%
  mutate(sentiment = ifelse(score >= 1, "pos",
                            ifelse(score <= -1, "neg", "neu")))

# 감정 빈도 및 비율 구하기
freq_score5 <- score_comment5 %>%
  count(sentiment) %>%
  mutate(ratio = n/sum(n)*100) %>% print()
## # A tibble: 3 x 3
##   sentiment     n ratio
##   <chr>     <int> <dbl>
## 1 neg          51 13.0 
## 2 neu         307 78.1 
## 3 pos          35  8.91
# 막대 그래프 만들기
ggplot(freq_score5, aes(x = sentiment, y = n, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = n), vjust = -0.3, size=20) +
  scale_x_discrete(limits = c("pos", "neu", "neg"))+ # 축 순서 정하기
  theme(legend.box.background = element_rect(fill = "pink"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "감정 단어 유형", y = "빈도수 (n)", title = "TOPIC 5에서 사용된 감정 단어 유형")+
  theme(text = element_text(size=40))

# 비율 누적 막대그래프 만들기 - 감정비율 표현
# 더미 변수 생성
freq_score5$dummy <- 0

ggplot(freq_score5, aes(x = dummy, y = ratio, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = paste0(round(ratio, 1), "%")), # % 표시
            position = position_stack(vjust = 0.5), # 가운데에 텍스트 표시
            size=20) +
  theme(axis.title.x = element_blank(), # x축 이름 삭제
        axis.text.x = element_blank(), # x축 값 삭제
        axis.ticks.x = element_blank())+ # x축 값 삭제
  theme(legend.box.background = element_rect(fill = "skyblue"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(y = "비율 (총 100%)", title = "TOPIC 5에서 사용된 감정 단어 유형-비율")+
  theme(text = element_text(size=40))

5-3) 토픽5의 감정 범주 (긍정 /부정) 별 많이 사용되는 단어

# score_comment를 토큰화 진행
comment5 <- score_comment5 %>%
  unnest_tokens(input = reply,
                output = word,
                token = "words", # extractNoun이라고 지정할 경우 명사만 나옴. 동사도 나와야하므로 그냥 word를 해줌
                drop = F) %>%
  filter(str_detect(word, "[가-힣]") & # 한글 추출
           str_count(word) >= 2) # 두 글자 이상 추출
head(comment5)
## # A tibble: 6 x 5
##      id reply                                             score sentiment word   
##   <int> <chr>                                             <dbl> <chr>     <chr>  
## 1    16 원래 의도했던 배민이 없어졌음 주문많은순 가서 직~     0 neu       원래   
## 2    16 원래 의도했던 배민이 없어졌음 주문많은순 가서 직~     0 neu       의도했~
## 3    16 원래 의도했던 배민이 없어졌음 주문많은순 가서 직~     0 neu       배민이 
## 4    16 원래 의도했던 배민이 없어졌음 주문많은순 가서 직~     0 neu       없어졌~
## 5    16 원래 의도했던 배민이 없어졌음 주문많은순 가서 직~     0 neu       주문많~
## 6    16 원래 의도했던 배민이 없어졌음 주문많은순 가서 직~     0 neu       가서
# 감정 및 단어별 빈도 구하기 
freq_word5 <- comment5 %>%
  filter(str_count(word) >= 2) %>% # 2번 이상 등장하는 단어만
  count(sentiment, word, sort = T) %>% print()
## # A tibble: 4,269 x 3
##    sentiment word           n
##    <chr>     <chr>      <int>
##  1 neu       주문          27
##  2 neu       그냥          19
##  3 neu       너무          17
##  4 neu       배민          17
##  5 neu       전화로        13
##  6 neu       수수료        12
##  7 neu       이제          12
##  8 neu       총주문금액    12
##  9 neu       정말          10
## 10 neu       진짜          10
## # ... with 4,259 more rows
# 긍정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word5 %>%
  filter(sentiment == "pos")
## # A tibble: 540 x 3
##    sentiment word       n
##    <chr>     <chr>  <int>
##  1 pos       편하고     7
##  2 pos       이벤트     6
##  3 pos       주문       6
##  4 pos       제대로     5
##  5 pos       리뷰       4
##  6 pos       시간       4
##  7 pos       아니고     4
##  8 pos       갑자기     3
##  9 pos       누락       3
## 10 pos       다른       3
## # ... with 530 more rows
# 부정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word5 %>%
  filter(sentiment == "neg")
## # A tibble: 1,079 x 3
##    sentiment word           n
##    <chr>     <chr>      <int>
##  1 neg       너무           8
##  2 neg       확인           7
##  3 neg       고객센터       6
##  4 neg       정말           6
##  5 neg       주문           6
##  6 neg       진짜           6
##  7 neg       총주문금액     6
##  8 neg       못하고         5
##  9 neg       아니고         5
## 10 neg       업데이트       5
## # ... with 1,069 more rows
# 로그오즈비 계산하기
comment_wide1 <- freq_word5 %>%
  filter(sentiment != "neu") %>%
  pivot_wider(names_from = sentiment, # sentiment의 범주를 변수로 사용
              values_from = n,
              values_fill = list(n = 0)) %>% print() # 단어 없으면 0
## # A tibble: 1,529 x 3
##    word         neg   pos
##    <chr>      <int> <int>
##  1 너무           8     0
##  2 확인           7     0
##  3 편하고         0     7
##  4 고객센터       6     0
##  5 정말           6     1
##  6 주문           6     6
##  7 진짜           6     1
##  8 총주문금액     6     1
##  9 이벤트         3     6
## 10 못하고         5     0
## # ... with 1,519 more rows
# 로그 오즈비 구하는 공식
comment_wide1 <- comment_wide1 %>%
  mutate(log_RR = log(((pos + 1) / (sum(pos + 1))) / # pos에서의 단어의 비중
                        ((neg + 1) / (sum(neg + 1))))) # neg에서의 단어의 비중 => 에 로그 취한값
comment_wide1
## # A tibble: 1,529 x 4
##    word         neg   pos log_RR
##    <chr>      <int> <int>  <dbl>
##  1 너무           8     0 -1.93 
##  2 확인           7     0 -1.81 
##  3 편하고         0     7  2.34 
##  4 고객센터       6     0 -1.68 
##  5 정말           6     1 -0.988
##  6 주문           6     6  0.265
##  7 진짜           6     1 -0.988
##  8 총주문금액     6     1 -0.988
##  9 이벤트         3     6  0.825
## 10 못하고         5     0 -1.53 
## # ... with 1,519 more rows
# 로그오즈비가 가장 큰 단어 10개 추출 
top10_topic5 <- comment_wide1 %>%
  group_by(sentiment = ifelse(log_RR > 0, "pos", "neg")) %>%
  slice_max(abs(log_RR), n = 10, with_ties = F) # 로그RR 동점 단어 제외
top10_topic5
## # A tibble: 20 x 5
## # Groups:   sentiment [2]
##    word       neg   pos log_RR sentiment
##    <chr>    <int> <int>  <dbl> <chr>    
##  1 너무         8     0  -1.93 neg      
##  2 확인         7     0  -1.81 neg      
##  3 고객센터     6     0  -1.68 neg      
##  4 못하고       5     0  -1.53 neg      
##  5 내가         4     0  -1.34 neg      
##  6 수수료       4     0  -1.34 neg      
##  7 안된다       4     0  -1.34 neg      
##  8 취소가       4     0  -1.34 neg      
##  9 확인이       4     0  -1.34 neg      
## 10 계속         3     0  -1.12 neg      
## 11 편하고       0     7   2.34 pos      
## 12 제대로       0     5   2.06 pos      
## 13 누락         0     3   1.65 pos      
## 14 쓰고         0     3   1.65 pos      
## 15 있는         0     3   1.65 pos      
## 16 좋고         0     3   1.65 pos      
## 17 좋네요       0     3   1.65 pos      
## 18 좋아요       0     3   1.65 pos      
## 19 좋은         0     3   1.65 pos      
## 20 개같은       0     2   1.36 pos
#막대 그래프 그리기

ggplot(top10_topic5, aes(x = reorder(word, log_RR), y = log_RR, fill = sentiment)) +
  geom_col() +
  coord_flip() +
  labs(x = NULL) +
  theme(text = element_text(size=10))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "", y = "y는 로그-오즈비 (logRR)", title = "긍정/부정 리뷰에서 자주 사용된 단어", subtitle="TOPIC 5")+
  theme(text = element_text(size=25))

6-1) 토픽6의 최빈 단어별 감정분석

# 토픽6 선택
topic6<-word_baemin %>% 
  filter(topic==6) %>% 
  select(topic, id, word, reply ) %>% print()
## # A tibble: 100,358 x 4
##    topic    id word     reply                                                    
##    <int> <int> <chr>    <chr>                                                    
##  1     6     3 배민     배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  2     6     3 년동안   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  3     6     3 썼는데   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  4     6     3 월부터   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  5     6     3 정책이   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  6     6     3 불편하게 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  7     6     3 바꿨네요 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  8     6     3 자영업자 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
##  9     6     3 수수료도 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
## 10     6     3 그렇고   배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨네요 자~
## # ... with 100,348 more rows
# 감정점수 부여
topic6 <- topic6 %>%
  left_join(senti_dic, by = "word") %>%
  mutate(polarity = ifelse(is.na(polarity), 0, polarity)) # 사전에 없는 단어의 점수는 0

topic6 %>% 
  dplyr::select(word, polarity)
## # A tibble: 100,358 x 2
##    word     polarity
##    <chr>       <dbl>
##  1 배민            0
##  2 년동안          0
##  3 썼는데          0
##  4 월부터          0
##  5 정책이          0
##  6 불편하게       -2
##  7 바꿨네요        0
##  8 자영업자        0
##  9 수수료도        0
## 10 그렇고          0
## # ... with 100,348 more rows
# 감정분류
topic6 <- topic6 %>%
  mutate(sentiment = ifelse(polarity ==2, "pos",
                            ifelse(polarity == -2, "neg", "neu")))

topic6 %>%
  count(sentiment)
## # A tibble: 3 x 2
##   sentiment     n
##   <chr>     <int>
## 1 neg         421
## 2 neu       99555
## 3 pos         382
# 긍정/부정 상위 10개 단어보기
top10_sentiment6 <- topic6 %>%
  filter(sentiment != "neu") %>% # 중립 단어 제외
  count(sentiment, word) %>%
  group_by(sentiment) %>%
  slice_max(n, n = 10) %>% print(n=Inf) # 중복 허용
## # A tibble: 20 x 3
## # Groups:   sentiment [2]
##    sentiment word         n
##    <chr>     <chr>    <int>
##  1 neg       번거롭게    33
##  2 neg       못하게      30
##  3 neg       못하고      23
##  4 neg       어려운      23
##  5 neg       심각하게    22
##  6 neg       실망        21
##  7 neg       힘든        21
##  8 neg       싫어하는    20
##  9 neg       짜증        20
## 10 neg       더러운      19
## 11 pos       좋은        60
## 12 pos       좋고        43
## 13 pos       고르고      42
## 14 pos       깔끔하다    39
## 15 pos       좋다        39
## 16 pos       개선        29
## 17 pos       안전        19
## 18 pos       좋다고      17
## 19 pos       편하고      17
## 20 pos       대단하다    15
# 막대 그래프 그리기
top10_sentiment6 %>% 
  ggplot(aes(x = reorder(word, n),
             y = n,
             fill = sentiment)) +
  geom_col() +
  coord_flip() +
  geom_text(aes(label = n), hjust = -0.1,
            color = "dark grey", size=6) +
  facet_wrap(~ sentiment, scales = "free") +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.25))) +
  labs(x = NULL,y = "빈도수 (n)", title = "TOPIC 6에서 자주 사용된 감정단어 ") +
  theme(text = element_text(size=25))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))

6-2) 토픽6의 전체적인 감정 경향 구하기

# 리뷰별 감정 점수 
score_comment6 <- topic6 %>%
  group_by(id, reply) %>%
  summarise(score = sum(polarity)) %>%
  ungroup()
## `summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
# 긍정 점수가 높은 리뷰보기 
score_comment6 %>%
  select(score, reply) %>% 
  arrange(-score)
## # A tibble: 496 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1   195 장점은 서비스 하는 가게 종류가 많아서 좋다 인터페이스가 깔끔하다 그래~ 
##  2   116 우리 비장의 카드는 등록도 안되게 하는게 결제 개편인가 뭐가 편해졌다는~ 
##  3   112 열심히 구매했으니 할인 미끼로 광고해서 시간투자하며 할인신청으로 관련 ~
##  4    84 이용이 간편해서 대부분 배민만 사용했었는데 얼마 전 업데이트 후부터는 ~ 
##  5    80 월 일부터 일 회 배민페이로 만원 이상 결제하면 다음날에 천원 쿠폰 주는 ~
##  6    76 장난하나 주문누적금액 본다하면서 광고로 어글만 냅다 끌어놓고 정작 업데~
##  7    72 진짜 이럴거면 그냥 이벤트 하지 마세요 장난칩니까 미니게임이 터치는 제~ 
##  8    64 불만사항이 뭐냐고 하길래 적어봄 처음사용쿠폰 받고 안씀 월인듯 월됨 그~ 
##  9    64 배달의 민족 앱에서 카드 결제할때 앱을 설치 하라는거 제발 없애주세요 앱~
## 10    52 잘쓰고는 있는데 왜 등급이 높아질수록 혜택이 적어지요 아니 이벤트 많이 ~
## # ... with 486 more rows
# 부정 점수가 높은 리뷰보기
score_comment6 %>%
  select(score, reply) %>% 
  arrange(score)
## # A tibble: 496 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1   -44 연결상태가 불안정합니다 다음에 다시 접속해주세요 안내 계속뜨고 전화로~ 
##  2   -44 초심진짜 심각하게 잃으셨네요 예전같으면 그냥 천원쿠폰 뿌리셨는데 터치~ 
##  3   -42 이벤트하고 기분 더러운건 또 처음이네요 이럴거면 이벤트를 그냥 안하는게~
##  4   -42 첫구매 쿠폰사용을 위해 아버지꺼 깔아드렸는데 첫구매가 아니라고 뜹니다 ~
##  5   -40 무슨 쿠폰팩 판다길래 깔아봤는데 카테고리별로 장 우리 동네에 없거나 내~ 
##  6   -39 합병 이후 선을 지킬거라 생각했지만 오산이었습니다 오만하고 어리석은 판~
##  7   -38 더러운정책과 더러운 포인트 제도 옛날 초기때부터 사용해오던 유저인데 도~
##  8   -38 삼성페이 지원 못한다는 그 흔한 메시지나 알림 경고문구 한줄 없이 주문 ~ 
##  9   -38 아니 안정화 목적으로 업데이트를 천천히 해줄거면 기간을 넉넉히주던가 꼴~
## 10   -34 안녕 배민 이제 넌 우리 민족이 아니야 사람이든 기업이든 결국 사람이 결~ 
## # ... with 486 more rows
# 감정 점수 빈도 
# 전체적으로 0점이 부여된 리뷰이 가장 많고, 긍정과 부정의 양 극단으로 갈 수록 빈도가 감소함
score_comment6 %>%
  count(score)
## # A tibble: 67 x 2
##    score     n
##    <dbl> <int>
##  1   -44     2
##  2   -42     2
##  3   -40     1
##  4   -39     1
##  5   -38     3
##  6   -34     1
##  7   -30     3
##  8   -27     1
##  9   -26     1
## 10   -24     1
## # ... with 57 more rows
# 감정 분류하기
score_comment6 <- score_comment6 %>%
  mutate(sentiment = ifelse(score >= 1, "pos",
                            ifelse(score <= -1, "neg", "neu")))

# 감정 빈도 및 비율 구하기
freq_score6 <- score_comment6 %>%
  count(sentiment) %>%
  mutate(ratio = n/sum(n)*100) %>% print()
## # A tibble: 3 x 3
##   sentiment     n ratio
##   <chr>     <int> <dbl>
## 1 neg          52  10.5
## 2 neu         348  70.2
## 3 pos          96  19.4
# 막대 그래프 만들기
ggplot(freq_score6, aes(x = sentiment, y = n, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = n), vjust = -0.3, size=20) +
  scale_x_discrete(limits = c("pos", "neu", "neg"))+ # 축 순서 정하기
  theme(legend.box.background = element_rect(fill = "pink"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "감정 단어 유형", y = "빈도수 (n)", title = "TOPIC 6에서 사용된 감정 단어 유형")+
  theme(text = element_text(size=40))

# 비율 누적 막대그래프 만들기 - 감정비율 표현
# 더미 변수 생성
freq_score6$dummy <- 0

ggplot(freq_score6, aes(x = dummy, y = ratio, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = paste0(round(ratio, 1), "%")), # % 표시
            position = position_stack(vjust = 0.5), # 가운데에 텍스트 표시
            size=20) +
  theme(axis.title.x = element_blank(), # x축 이름 삭제
        axis.text.x = element_blank(), # x축 값 삭제
        axis.ticks.x = element_blank())+ # x축 값 삭제
  theme(legend.box.background = element_rect(fill = "skyblue"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(y = "비율 (총 100%)", title = "TOPIC 6에서 사용된 감정 단어 유형-비율")+
  theme(text = element_text(size=40))

6-3) 토픽6의 감정 범주 (긍정 /부정) 별 많이 사용되는 단어

# score_comment를 토큰화 진행
comment6 <- score_comment6 %>%
  unnest_tokens(input = reply,
                output = word,
                token = "words", # extractNoun이라고 지정할 경우 명사만 나옴. 동사도 나와야하므로 그냥 word를 해줌
                drop = F) %>%
  filter(str_detect(word, "[가-힣]") & # 한글 추출
           str_count(word) >= 2) # 두 글자 이상 추출
head(comment6)
## # A tibble: 6 x 5
##      id reply                                              score sentiment word  
##   <int> <chr>                                              <dbl> <chr>     <chr> 
## 1     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       배민  
## 2     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       년동안
## 3     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       썼는데
## 4     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       월부터
## 5     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       정책이
## 6     3 배민 년동안 잘 썼는데 월부터 정책이 불편하게 바꿨~   -24 neg       불편~
# 감정 및 단어별 빈도 구하기 
freq_word6 <- comment6 %>%
  filter(str_count(word) >= 2) %>% # 2번 이상 등장하는 단어만
  count(sentiment, word, sort = T) %>% print()
## # A tibble: 4,860 x 3
##    sentiment word           n
##    <chr>     <chr>      <int>
##  1 pos       이벤트        40
##  2 neu       업데이트      37
##  3 pos       쿠폰          23
##  4 neu       배민          21
##  5 neu       너무          15
##  6 neu       좋아요        15
##  7 neu       카드          15
##  8 pos       할인          15
##  9 neu       업데이트가    14
## 10 neu       계속          13
## # ... with 4,850 more rows
# 긍정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word6 %>%
  filter(sentiment == "pos")
## # A tibble: 1,415 x 3
##    sentiment word         n
##    <chr>     <chr>    <int>
##  1 pos       이벤트      40
##  2 pos       쿠폰        23
##  3 pos       할인        15
##  4 pos       너무        10
##  5 pos       다른         9
##  6 pos       업데이트     8
##  7 pos       좋아요       8
##  8 pos       그냥         7
##  9 pos       제대로       7
## 10 pos       카드         7
## # ... with 1,405 more rows
# 부정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word6 %>%
  filter(sentiment == "neg")
## # A tibble: 813 x 3
##    sentiment word       n
##    <chr>     <chr>  <int>
##  1 neg       배민       9
##  2 neg       쿠폰       8
##  3 neg       그냥       6
##  4 neg       저는       6
##  5 neg       너무       4
##  6 neg       아깝다     4
##  7 neg       않고       4
##  8 neg       어플       4
##  9 neg       이벤트     4
## 10 neg       지원       4
## # ... with 803 more rows
# 로그오즈비 계산하기
comment_wide1 <- freq_word6 %>%
  filter(sentiment != "neu") %>%
  pivot_wider(names_from = sentiment, # sentiment의 범주를 변수로 사용
              values_from = n,
              values_fill = list(n = 0)) %>% print() # 단어 없으면 0
## # A tibble: 2,083 x 3
##    word       pos   neg
##    <chr>    <int> <int>
##  1 이벤트      40     4
##  2 쿠폰        23     8
##  3 할인        15     1
##  4 너무        10     4
##  5 배민         5     9
##  6 다른         9     0
##  7 업데이트     8     2
##  8 좋아요       8     0
##  9 그냥         7     6
## 10 제대로       7     1
## # ... with 2,073 more rows
# 로그 오즈비 구하는 공식
comment_wide1 <- comment_wide1 %>%
  mutate(log_RR = log(((pos + 1) / (sum(pos + 1))) / # pos에서의 단어의 비중
                        ((neg + 1) / (sum(neg + 1))))) # neg에서의 단어의 비중 => 에 로그 취한값
comment_wide1
## # A tibble: 2,083 x 4
##    word       pos   neg log_RR
##    <chr>    <int> <int>  <dbl>
##  1 이벤트      40     4  1.86 
##  2 쿠폰        23     8  0.739
##  3 할인        15     1  1.84 
##  4 너무        10     4  0.546
##  5 배민         5     9 -0.753
##  6 다른         9     0  2.06 
##  7 업데이트     8     2  0.856
##  8 좋아요       8     0  1.95 
##  9 그냥         7     6 -0.109
## 10 제대로       7     1  1.14 
## # ... with 2,073 more rows
# 로그오즈비가 가장 큰 단어 10개 추출 
top10_topic6 <- comment_wide1 %>%
  group_by(sentiment = ifelse(log_RR > 0, "pos", "neg")) %>%
  slice_max(abs(log_RR), n = 10, with_ties = F) # 로그RR 동점 단어 제외
top10_topic6
## # A tibble: 20 x 5
## # Groups:   sentiment [2]
##    word         pos   neg log_RR sentiment
##    <chr>      <int> <int>  <dbl> <chr>    
##  1 저는           0     6  -2.19 neg      
##  2 아깝다         0     4  -1.85 neg      
##  3 지원           0     4  -1.85 neg      
##  4 결국           0     3  -1.63 neg      
##  5 많은           0     3  -1.63 neg      
##  6 못하고         0     3  -1.63 neg      
##  7 사용하고       0     3  -1.63 neg      
##  8 소비자         0     3  -1.63 neg      
##  9 없어서         0     3  -1.63 neg      
## 10 일부러         0     3  -1.63 neg      
## 11 다른           9     0   2.06 pos      
## 12 좋아요         8     0   1.95 pos      
## 13 이벤트        40     4   1.86 pos      
## 14 할인          15     1   1.84 pos      
## 15 안드로이드     5     0   1.55 pos      
## 16 편리하고       5     0   1.55 pos      
## 17 편하고         5     0   1.55 pos      
## 18 비장의         4     0   1.37 pos      
## 19 좋습니다       4     0   1.37 pos      
## 20 처음           4     0   1.37 pos
#막대 그래프 그리기

ggplot(top10_topic6, aes(x = reorder(word, log_RR), y = log_RR, fill = sentiment)) +
  geom_col() +
  coord_flip() +
  labs(x = NULL) +
  theme(text = element_text(size=10))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "", y = "y는 로그-오즈비 (logRR)", title = "긍정/부정 리뷰에서 자주 사용된 단어", subtitle="TOPIC 6")+
  theme(text = element_text(size=25))

7-1) 토픽7의 최빈 단어별 감정분석

# 토픽7 선택
topic7<-word_baemin %>% 
  filter(topic==7) %>% 
  select(topic, id, word, reply ) %>% print()
## # A tibble: 93,913 x 4
##    topic    id word       reply                                                 
##    <int> <int> <chr>      <chr>                                                 
##  1     7     9 그동안     그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가하는지 ~
##  2     7     9 잘먹었어요 그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가하는지 ~
##  3     7     9 그렇게     그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가하는지 ~
##  4     7     9 야금야금   그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가하는지 ~
##  5     7     9 돈을       그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가하는지 ~
##  6     7     9 추가하는지 그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가하는지 ~
##  7     7     9 한개도     그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가하는지 ~
##  8     7     9 아깝다     그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가하는지 ~
##  9     7     9 그동안     그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가하는지 ~
## 10     7     9 잘먹었어요 그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가하는지 ~
## # ... with 93,903 more rows
# 감정점수 부여
topic7 <- topic7 %>%
  left_join(senti_dic, by = "word") %>%
  mutate(polarity = ifelse(is.na(polarity), 0, polarity)) # 사전에 없는 단어의 점수는 0

topic7 %>% 
  dplyr::select(word, polarity)
## # A tibble: 93,913 x 2
##    word       polarity
##    <chr>         <dbl>
##  1 그동안            0
##  2 잘먹었어요        0
##  3 그렇게            0
##  4 야금야금          0
##  5 돈을              0
##  6 추가하는지        0
##  7 한개도            0
##  8 아깝다           -1
##  9 그동안            0
## 10 잘먹었어요        0
## # ... with 93,903 more rows
# 감정분류
topic7 <- topic7 %>%
  mutate(sentiment = ifelse(polarity ==2, "pos",
                            ifelse(polarity == -2, "neg", "neu")))

topic7 %>%
  count(sentiment)
## # A tibble: 3 x 2
##   sentiment     n
##   <chr>     <int>
## 1 neg         460
## 2 neu       93130
## 3 pos         323
# 긍정/부정 상위 10개 단어보기
top10_sentiment7 <- topic7 %>%
  filter(sentiment != "neu") %>% # 중립 단어 제외
  count(sentiment, word) %>%
  group_by(sentiment) %>%
  slice_max(n, n = 10) %>% print(n=Inf) # 중복 허용
## # A tibble: 20 x 3
## # Groups:   sentiment [2]
##    sentiment word         n
##    <chr>     <chr>    <int>
##  1 neg       못하게     108
##  2 neg       불편        50
##  3 neg       못하고      48
##  4 neg       최악        37
##  5 neg       불편하고    34
##  6 neg       화나게      24
##  7 neg       나쁜        22
##  8 neg       최악의      21
##  9 neg       재앙이      16
## 10 neg       화가        16
## 11 pos       맛집        71
## 12 pos       성공        44
## 13 pos       편하고      37
## 14 pos       덕을        32
## 15 pos       성공한      20
## 16 pos       소중한      18
## 17 pos       개선        17
## 18 pos       좋은        15
## 19 pos       편하게      14
## 20 pos       좋음        13
# 막대 그래프 그리기
top10_sentiment7 %>% 
  ggplot(aes(x = reorder(word, n),
             y = n,
             fill = sentiment)) +
  geom_col() +
  coord_flip() +
  geom_text(aes(label = n), hjust = -0.1,
            color = "dark grey", size=6) +
  facet_wrap(~ sentiment, scales = "free") +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.25))) +
  labs(x = NULL,y = "빈도수 (n)", title = "TOPIC 7에서 자주 사용된 감정단어 ") +
  theme(text = element_text(size=25))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))

7-2) 토픽7의 전체적인 감정 경향 구하기

# 리뷰별 감정 점수 
score_comment7 <- topic7 %>%
  group_by(id, reply) %>%
  summarise(score = sum(polarity)) %>%
  ungroup()
## `summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
# 긍정 점수가 높은 리뷰보기 
score_comment7 %>%
  select(score, reply) %>% 
  arrange(-score)
## # A tibble: 368 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1   104 배민정책상 어플가입시 정확한 본인확인을 하지 않기 때문에 누군가가 내 ~ 
##  2    88 여러 맛집 정보를 볼 수 있게 한것과 정보를 입력하면 결제만 하면되는 편~ 
##  3    88 결제하면 연결 상태가 일시적으로 불안정합니다 다시 시도해주세요 라고 분~
##  4    80 이벤트 적당히좀하지죠 계속 결제 실패라함 번을 결제해봤지만 결제된적 한~
##  5    70 배달 앱 중에서 제일 편하고 정직하게 운영되는 것 같아 자주 시켜먹습니다~
##  6    36 첫주문 인증 번이나 했는데 계속 인증하라고 하고 쿠폰도 안받아지네요 첫~ 
##  7    35 갑자기 로그아웃 되더니 비밀번호 변경 실패 메세지가 계속 뜨네요 휴대폰 ~
##  8    35 배민앱 잘 쓰고 있어요 그런데 배달해주시는 분들이 영수증 떼는 기계를 들~
##  9    34 처음엔 신선하고 좋았는데 출시 몇년 되어가는데 아직도 초기 구성에서 벗~ 
## 10    32 여기저기 여행다닐때도 넘 편해요 지역 설정만변경해주면 언제나 좋은 정도~
## # ... with 358 more rows
# 부정 점수가 높은 리뷰보기
score_comment7 %>%
  select(score, reply) %>% 
  arrange(score)
## # A tibble: 368 x 2
##    score reply                                                                  
##    <dbl> <chr>                                                                  
##  1  -108 갑자기 아이디는 사용안한지 오래됬는데 인증번호 하라고 뜨고 이건 뭐 다~ 
##  2  -100 첫홈화면에서만 업체 검색되서 불편 카테고리 들어가서도 업체 검색 가능했~
##  3   -48 수수료 인상에 대한 태도가 사람 화나게 만드네요 독점할 수 있을 때 하면 ~
##  4   -46 네이버 연동할 때 필수정보라는 말이 없길래 이메일 체크 해제했더니 이메~ 
##  5   -44 업체컴플레인 대처하는 방식부터 미투조롱하는 광고 평소에도 진부하고 재~ 
##  6   -44 할인 자주 하는건 좋은데 아이디랑 비밀번호 찾는게 혈압오르게 하네요 비~ 
##  7   -42 안녕하세요 배민을 잘 사용하고 있다가 얼마전 갤럭시 노트 으로 폰을 바꾸~
##  8   -39 합병 이후 선을 지킬거라 생각했지만 오산이었습니다 오만하고 어리석은 판~
##  9   -34 결제를 할 수 가 없네요 그 지코바좀 먹겠다는데 왜 다 되다가 결제할때 왜~
## 10   -30 본인인증 잘못했는데 어디서 다시해요 있는 쿠폰은 못쓴다하고 다른계정은 ~
## # ... with 358 more rows
# 감정 점수 빈도 
# 전체적으로 0점이 부여된 리뷰이 가장 많고, 긍정과 부정의 양 극단으로 갈 수록 빈도가 감소함
score_comment7 %>%
  count(score)
## # A tibble: 53 x 2
##    score     n
##    <dbl> <int>
##  1  -108     1
##  2  -100     1
##  3   -48     1
##  4   -46     1
##  5   -44     2
##  6   -42     1
##  7   -39     1
##  8   -34     1
##  9   -30     2
## 10   -27     1
## # ... with 43 more rows
# 감정 분류하기
score_comment7 <- score_comment7 %>%
  mutate(sentiment = ifelse(score >= 1, "pos",
                            ifelse(score <= -1, "neg", "neu")))

# 감정 빈도 및 비율 구하기
freq_score7 <- score_comment7 %>%
  count(sentiment) %>%
  mutate(ratio = n/sum(n)*100) %>% print()
## # A tibble: 3 x 3
##   sentiment     n ratio
##   <chr>     <int> <dbl>
## 1 neg          44 12.0 
## 2 neu         288 78.3 
## 3 pos          36  9.78
# 막대 그래프 만들기
ggplot(freq_score7, aes(x = sentiment, y = n, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = n), vjust = -0.3, size=20) +
  scale_x_discrete(limits = c("pos", "neu", "neg"))+ # 축 순서 정하기
  theme(legend.box.background = element_rect(fill = "pink"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "감정 단어 유형", y = "빈도수 (n)", title = "TOPIC 7에서 사용된 감정 단어 유형")+
  theme(text = element_text(size=40))

# 비율 누적 막대그래프 만들기 - 감정비율 표현
# 더미 변수 생성
freq_score7$dummy <- 0

ggplot(freq_score7, aes(x = dummy, y = ratio, fill = sentiment)) +
  geom_col() +
  geom_text(aes(label = paste0(round(ratio, 1), "%")), # % 표시
            position = position_stack(vjust = 0.5), # 가운데에 텍스트 표시
            size=20) +
  theme(axis.title.x = element_blank(), # x축 이름 삭제
        axis.text.x = element_blank(), # x축 값 삭제
        axis.ticks.x = element_blank())+ # x축 값 삭제
  theme(legend.box.background = element_rect(fill = "skyblue"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(y = "비율 (총 100%)", title = "TOPIC 7에서 사용된 감정 단어 유형-비율")+
  theme(text = element_text(size=40))

7-3) 토픽7의 감정 범주 (긍정 /부정) 별 많이 사용되는 단어

# score_comment를 토큰화 진행
comment7 <- score_comment7 %>%
  unnest_tokens(input = reply,
                output = word,
                token = "words", # extractNoun이라고 지정할 경우 명사만 나옴. 동사도 나와야하므로 그냥 word를 해줌
                drop = F) %>%
  filter(str_detect(word, "[가-힣]") & # 한글 추출
           str_count(word) >= 2) # 두 글자 이상 추출
head(comment7)
## # A tibble: 6 x 5
##      id reply                                           score sentiment word    
##   <int> <chr>                                           <dbl> <chr>     <chr>   
## 1     9 그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가~    -3 neg       그동안  
## 2     9 그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가~    -3 neg       잘먹었~ 
## 3     9 그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가~    -3 neg       그렇게  
## 4     9 그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가~    -3 neg       야금야금
## 5     9 그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가~    -3 neg       돈을    
## 6     9 그동안 잘먹었어요 뭘 그렇게 야금야금 돈을 추가~    -3 neg       추가하~
# 감정 및 단어별 빈도 구하기 
freq_word7 <- comment7 %>%
  filter(str_count(word) >= 2) %>% # 2번 이상 등장하는 단어만
  count(sentiment, word, sort = T) %>% print()
## # A tibble: 4,136 x 3
##    sentiment word       n
##    <chr>     <chr>  <int>
##  1 neu       계속      24
##  2 neu       다시      24
##  3 neu       결제      17
##  4 neu       했는데    16
##  5 neu       안되고    14
##  6 neu       어떻게    13
##  7 neu       너무      12
##  8 neu       로그인    12
##  9 neu       배민      12
## 10 neu       수수료    12
## # ... with 4,126 more rows
# 긍정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word7 %>%
  filter(sentiment == "pos")
## # A tibble: 748 x 3
##    sentiment word       n
##    <chr>     <chr>  <int>
##  1 pos       계속       6
##  2 pos       영수증     5
##  3 pos       결제       4
##  4 pos       이벤트     4
##  5 pos       좋아요     4
##  6 pos       휴대폰     4
##  7 pos       근데       3
##  8 pos       너무       3
##  9 pos       다시       3
## 10 pos       때문에     3
## # ... with 738 more rows
# 부정으로 분리된 리뷰 중 빈번하게 등장하는 단어
freq_word7 %>%
  filter(sentiment == "neg")
## # A tibble: 786 x 3
##    sentiment word         n
##    <chr>     <chr>    <int>
##  1 neg       네이버       6
##  2 neg       너무         5
##  3 neg       그냥         4
##  4 neg       다시         4
##  5 neg       못하게       4
##  6 neg       아니고       4
##  7 neg       아무것도     4
##  8 neg       아이디       4
##  9 neg       주소         4
## 10 neg       진짜         4
## # ... with 776 more rows
# 로그오즈비 계산하기
comment_wide1 <- freq_word7 %>%
  filter(sentiment != "neu") %>%
  pivot_wider(names_from = sentiment, # sentiment의 범주를 변수로 사용
              values_from = n,
              values_fill = list(n = 0)) %>% print() # 단어 없으면 0
## # A tibble: 1,432 x 3
##    word       neg   pos
##    <chr>    <int> <int>
##  1 네이버       6     1
##  2 계속         3     6
##  3 너무         5     3
##  4 영수증       0     5
##  5 그냥         4     2
##  6 다시         4     3
##  7 못하게       4     0
##  8 아니고       4     1
##  9 아무것도     4     0
## 10 아이디       4     0
## # ... with 1,422 more rows
# 로그 오즈비 구하는 공식
comment_wide1 <- comment_wide1 %>%
  mutate(log_RR = log(((pos + 1) / (sum(pos + 1))) / # pos에서의 단어의 비중
                        ((neg + 1) / (sum(neg + 1))))) # neg에서의 단어의 비중 => 에 로그 취한값
comment_wide1
## # A tibble: 1,432 x 4
##    word       neg   pos log_RR
##    <chr>    <int> <int>  <dbl>
##  1 네이버       6     1 -1.23 
##  2 계속         3     6  0.583
##  3 너무         5     3 -0.382
##  4 영수증       0     5  1.81 
##  5 그냥         4     2 -0.488
##  6 다시         4     3 -0.200
##  7 못하게       4     0 -1.59 
##  8 아니고       4     1 -0.893
##  9 아무것도     4     0 -1.59 
## 10 아이디       4     0 -1.59 
## # ... with 1,422 more rows
# 로그오즈비가 가장 큰 단어 10개 추출 
top10_topic7 <- comment_wide1 %>%
  group_by(sentiment = ifelse(log_RR > 0, "pos", "neg")) %>%
  slice_max(abs(log_RR), n = 10, with_ties = F) # 로그RR 동점 단어 제외
top10_topic7
## # A tibble: 20 x 5
## # Groups:   sentiment [2]
##    word       neg   pos log_RR sentiment
##    <chr>    <int> <int>  <dbl> <chr>    
##  1 못하게       4     0  -1.59 neg      
##  2 아무것도     4     0  -1.59 neg      
##  3 아이디       4     0  -1.59 neg      
##  4 주소         4     0  -1.59 neg      
##  5 그래서       3     0  -1.36 neg      
##  6 문제가       3     0  -1.36 neg      
##  7 배민에서     3     0  -1.36 neg      
##  8 안되고       3     0  -1.36 neg      
##  9 없다         3     0  -1.36 neg      
## 10 최악의       3     0  -1.36 neg      
## 11 영수증       0     5   1.81 pos      
## 12 좋아요       0     4   1.63 pos      
## 13 휴대폰       0     4   1.63 pos      
## 14 근데         0     3   1.41 pos      
## 15 때문에       0     3   1.41 pos      
## 16 안되길래     0     3   1.41 pos      
## 17 앱이         0     3   1.41 pos      
## 18 전에         0     3   1.41 pos      
## 19 좋은         0     3   1.41 pos      
## 20 주소가       0     3   1.41 pos
#막대 그래프 그리기

ggplot(top10_topic7, aes(x = reorder(word, log_RR), y = log_RR, fill = sentiment)) +
  geom_col() +
  coord_flip() +
  labs(x = NULL) +
  theme(text = element_text(size=10))+
  theme(legend.box.background = element_rect(fill = "gray"), 
        legend.box.margin = margin(3, 3, 3, 3))+
  labs(x = "", y = "y는 로그-오즈비 (logRR)", title = "긍정/부정 리뷰에서 자주 사용된 단어", subtitle="TOPIC 7")+
  theme(text = element_text(size=25))

여기까지, 모든 토픽의 감정분석을 완료하였다.


=> 공통적으로 모든 토픽에서 ’중립’단어의 비중이 가장 높은 것으로 확인되었다. 최소 65%~80% 정도가 중립 단어이다.

=> 토픽 1은 긍정 단어 사용 비율이 전체의 16% 정도로 부정 단어 사용 비율보다 높은 편이다. 주로 긍정 문장에서는 ‘편리성’ 에 관한 단어가 도출된다.

=> 토픽 2는 부정 단어 사용 비율이 전체의 15% 정도로 긍정 단어 사용 비율보다 높은 편이다. 부정 문장에서는 주로 ‘힘든’, ‘어려운’, ‘시국’ 등 COVID-19로 인해 경제적 타격을 맞은 현 상황에 대한 단어가 도출된 것으로 확인된다.

=> 토픽 3은 부정 단어 사용 비율이 14% 정도로 긍정 단어 사용 비율보다는 조금 더 많은 편이지만 토픽1, 토픽2에 비해 비중이 엇비슷하다. 긍정 문장에서는 토픽 1에서 주로 언급된 ‘편리성’ 에 관한 단어가, 부정 문장에서는 토픽 2에서 주로 나타난 현 어려운 상황에 대한 단어가 도출된 것으로 확인된다.

=> 토픽 4는 긍정 단어 사용 비율이 거의 20% 정도이며, 앞 토픽들에 비해 중립 단어 사용은 줄고 긍정 단어 사용이 늘어난 것으로 확인된다. 긍정 문장에서는 주로 ‘편리성’ 혹은 ‘메뉴’ 와 같은 단어가 확인되었다.

=> 토픽 5는 중립 단어 사용 비율이 전체의 약 80% 정도로, 중립 단어가 긍정, 부정 단어에 비해 압도적으로 많이 사용된 것으로 확인된다. 심지어 긍정 단어 사용은 9% 정도에 불과하다. 부정 문장에서 주로 사용된 단어로는 ‘고객센터’, ‘취소’, ‘수수료’ 등 고객 서비스에 관한 부분이 많은 것으로 확인된다.

=> 토픽 6은 긍정 단어 사용이 20% 정도로 가장 많았으며, 중립 단어 사용은 70% 정도, 부정 단어 사용은 가장 적은 것으로 확인되었다. 긍정 문장에서 주로 사용된 단어로는 ‘할인’, ‘이벤트’ 등으로 확인된다.

=> 토픽7은 전체 80% 정도가 중립 단어가 사용되었다. 긍정 문장과 부정 문장 전체적으로 ‘아이디’, ‘앱’ 등 어플리케이션 사용성에 관한 단어가 주로 도출되었다.


8. 각 토픽들에 대해 가중로그오즈비에 의한 주요단어 10개들에 다한 막대그래프를 그리시오. (10)

가중 로그 오즈비란?
: 로그 오즈비는 문서 2종에 대한 승산으로 비를 구하므로, 3종 이상의 문서로 구성된 말뭉치에 적용할 수 없는 한계가 있다.
tf_idf는 3종 이상의 문서로 구성된 말뭉치에 적용할 수 있지만, tf_idf계산 방식에서 오는 한계가 있다.
따라서 이것의 대안으로 로그 오즈비에 베이지언 확률모형을 적용한 것이 가중 로그 오즈비이다.
가중 로그 오즈비를 구할 경우 상대적인 로그 오즈 (승산), 즉 상대적으로 많이 쓰이는 단어를 알 수 있다.

4번에서 tf-idf 값까지 구했던 freq를 사용하여 가중 로그비를 구한다.
# 가중 로그 오즈비 구하기 (앞에서 사용한 freq 사용)
freq_log <- freq %>% 
  bind_log_odds(set = topic, feature = word, n = n) %>%
  arrange(desc(log_odds_weighted))
freq_log
## # A tibble: 10,415 x 7
##    topic word       n      tf   idf  tf_idf log_odds_weighted
##    <int> <chr>  <int>   <dbl> <dbl>   <dbl>             <dbl>
##  1     2 수수료   227 0.0623  0     0                    8.29
##  2     1 배달     314 0.0926  0     0                    7.78
##  3     7 번호      61 0.0168  0.336 0.00564              7.63
##  4     7 로그인    54 0.0148  0.336 0.00499              7.48
##  5     7 아이디    26 0.00714 0.847 0.00605              7.41
##  6     6 지원      16 0.00368 1.25  0.00461              6.56
##  7     7 인증      63 0.0173  0.154 0.00267              6.36
##  8     2 프로       9 0.00247 1.95  0.00480              5.95
##  9     7 회원가    17 0.00467 0.847 0.00396              5.94
## 10     7 비밀      24 0.00659 0.560 0.00369              5.89
## # ... with 10,405 more rows
# 주요 10개 단어 추출
top10_log <- freq_log %>%
  group_by(topic) %>%
  slice_max(log_odds_weighted, n = 10, with_ties = F)


# 그래프 순서 지정
top10_log$topic <- factor(top10_log$topic,
                         levels = c(1:7))

# 그래프 그리기
top10_log %>% 
  ggplot(aes(x = reorder_within(x=word, by=log_odds_weighted, within=topic),
             y = log_odds_weighted,
             fill = topic)) +
  labs(x = "", y = "y는 log_odds_weighted", title = "TOPIC별 중요한 단어", subtitle="(타 TOPIC 대비 상대적으로 많이 나오는 단어)") +
  geom_text(aes(label = round(log_odds_weighted,4) , hjust = -0.1),
            color = "dark grey", size=6)+ 
  geom_col(show.legend = F) +
  coord_flip() +
  facet_wrap(~ topic, scales = "free", ncol = 4) +
  scale_x_reordered() +
  labs(x = NULL) +
  theme(text = element_text(size=25))

=>

9. 위의 모든 것을 고려하여 각 토픽에 대한 이름을 짓고 설명하시오. (10)

토픽별 이름을 짓는 것은 토픽별 전체적인 리뷰의 내용을 파악한 후 축약하는, 연구자의 주관이 들어간 분야이다.
토픽 모델링은 다수의 문서에서 잠재적으로 의미있는 토픽을 발견하는 것으로 다량의 텍스트의 핵심 주제를 찾아 비슷한 내용으로 분류하는 방법이다.
따라서 분리된 토픽의 주제가 무엇인지 파악해서 이름을 짓는 것이야 말로 광범위한 다량의 비정형 텍스트 데이터에서 인사이트를 발견할 수 있는 방법이다.
beta를 사용해서 만든 term_topic (단어가 들어있음) 을 통해 토픽 별 beta 값이 높은 단어 6개를 추려낸다.
# 토픽별 문서 수와 단어를 막대그래프로 나타내기

# 토픽별 주요 단어 목록 만들기 (토픽별 beta 값이 높은 상위 6개의 단어가 나옴)
top6_terms <- term_topic %>%
  group_by(topic) %>%
  slice_max(beta, n = 6, with_ties = F) %>%
  summarise(term = paste(term, collapse = ", "))
top6_terms
## # A tibble: 7 x 2
##   topic term                                        
##   <int> <chr>                                       
## 1     1 배달, 이용, 이상, 라이더, 주소, 업체        
## 2     2 수수료, 요기요, 소상공인, 서비스, 민족, 인상
## 3     3 삭제, 어플, 탈퇴, 생각, 포인트, 독과점      
## 4     4 리뷰, 음식, 메뉴, 가게, 불편, 사진          
## 5     5 주문, 전화, 금액, 시간, 고객, 취소          
## 6     6 사용, 쿠폰, 업데이트, 이벤트, 할인, 카드    
## 7     7 결제, 확인, 번호, 인증, 문제, 로그인
#토픽별 문서 빈도 구하기
count_topic <- baemin_topic %>%
  count(topic) %>% print()
## # A tibble: 7 x 2
##   topic     n
##   <int> <int>
## 1     1   425
## 2     2   479
## 3     3   459
## 4     4   454
## 5     5   393
## 6     6   496
## 7     7   368
# 문서 빈도에 주요 단어 결합
count_topic_word <- count_topic %>%
  left_join(top6_terms, by = "topic") %>%
  mutate(topic_name = paste("Topic", topic)) %>% print()
## # A tibble: 7 x 4
##   topic     n term                                         topic_name
##   <int> <int> <chr>                                        <chr>     
## 1     1   425 배달, 이용, 이상, 라이더, 주소, 업체         Topic 1   
## 2     2   479 수수료, 요기요, 소상공인, 서비스, 민족, 인상 Topic 2   
## 3     3   459 삭제, 어플, 탈퇴, 생각, 포인트, 독과점       Topic 3   
## 4     4   454 리뷰, 음식, 메뉴, 가게, 불편, 사진           Topic 4   
## 5     5   393 주문, 전화, 금액, 시간, 고객, 취소           Topic 5   
## 6     6   496 사용, 쿠폰, 업데이트, 이벤트, 할인, 카드     Topic 6   
## 7     7   368 결제, 확인, 번호, 인증, 문제, 로그인         Topic 7
# 토픽 별 문서 수와 주요 단어를 막대 그래프로 나타내기
ggplot(count_topic_word,
       aes(x = reorder(topic_name, n),
           y = n,
           fill = topic_name)) +
  geom_col(show.legend = F) +
  coord_flip() +
  geom_text(aes(label = comma(n, accuracy = 1)),  # 문서 빈도 표시
            hjust = -0.2, 
            col = "dark grey",
            size=12) + # 막대 밖에 표시
  geom_text(aes(label = term), # 주요 단어 표시
            hjust = 1.03, # 이건 막대 안에 표시
            col = "white",
            size=12) + 
  scale_y_continuous(expand = c(0, 0),  # y축-막대 간격 줄이기
                     limits = c(0, 700)) +
  labs(title = "토픽별 주요 단어 및 리뷰 빈도",
       x = NULL, y = NULL) +
  theme_minimal() +
  theme(plot.title = element_text(size = 30, face = "bold"),
        text = element_text(size=25))

이 과정을 통해 토픽 별 문서 수와 주요 단어를 한 눈에 파악할 수 있다.
다음으로 gamma를 활용해 토픽별로 분리가 된 원문 (리뷰) 데이터인 baemin_topic을 활용한다.
gamma가 높은 순으로 나오게 하며, 토픽별로 gamma가 높은 상위 50개의 문장만 나오게한다.
# 토픽별로 gamma가 높은 50개의 주요 문서 (리뷰) 추출
reply_topic <- baemin_topic %>%
  group_by(topic) %>%
  slice_max(gamma, n = 50) %>% 
  select(topic, gamma, reply) %>% 
  arrange(topic,-gamma) %>% print() #gamma가 높은 순으로 나옴
## # A tibble: 352 x 3
## # Groups:   topic [7]
##    topic gamma reply                                                            
##    <int> <dbl> <chr>                                                            
##  1     1 0.338 정말 최악입니다 별 개도 아깝네요 처음 가입 후 주문인데 주소가 이~
##  2     1 0.290 진짜 몇년째 배민이용하면서 계속 최상 고객이었는데 배민 라이더스 ~
##  3     1 0.286 저희집 배달비가 천원이어야 하는데 배달비인 천원으로 나와요 항상 ~
##  4     1 0.275 이용하가 쉽고 인분배달도 되고 간편하게 결재도 되고 주문부터 배달~
##  5     1 0.270 앱상에서 배달시간을 표기한다는것은 소비자 입장에서 참고사항으로 ~
##  6     1 0.264 라이더 지정 차단 기능 있었으면 좋겠어요 불친절한 라이더에게는 배~
##  7     1 0.249 많이쓰다보니 편하기는한데 배달팁이 너무 부담스러워요 장기적으로 ~
##  8     1 0.246 예약배달 카톡 메시지가 혼란스러워요 수정좀 해주세요 예약안내시 ~ 
##  9     1 0.243 배달하시는분 짜증내시는거 정말 돌아버리겠네요 저도 그분에게 짜증~
## 10     1 0.240 배달안되는 지역이면 위치설정하면 안뜨게 해야하는거 아닌지 배달안~
## # ... with 342 more rows

이제부터 토픽별로 (총 7개) 작성된 리뷰의 내용을 살펴본다.

# 토픽1 내용 살펴보기
reply_topic %>%
  filter(topic == 1) %>%
  pull(reply)
##  [1] "정말 최악입니다 별 개도 아깝네요 처음 가입 후 주문인데 주소가 이상하다고 배송이 중단되어 라이더님 전화가 왔습니다 라이더님은 고객센터에 얘기를 해서 주소를 바꿔야한다고 해서 전화했더니 상세주소에 주소를 입력했다고 직접 픽업을 가야한다고 응대를 하는데 그럴거면 왜 배달을 합니까 그럴거면 나가서 사오지 요즘같이 배달비 나오는 세상에 배달비 아깝고 시간아까운데 응대내용도 이상하고 고객센터 통화 후 어플을 보니 어플 자체도 이상합니다 듣도보도 못한 가지도 않은 지역에 제멋대로 위치설정이 되어있고 그걸 설정하는 것도 처음 이용하 전체 리뷰"          
##  [2] "진짜 몇년째 배민이용하면서 계속 최상 고객이었는데 배민 라이더스 이용하면서 이렇게 어이가없기는 처음이네요 라이더스 이용 시 배달이 늦어질 수 있다고는 했지만 시간 분이 넘어가도록 업장에 조리요청을 하지않을 정도라면 배달이 불가능하다고 판단하셔서 업체 측에서 배달문제로 취소할수있도록 하는게 맞다고 생각합니다 업체쪽에서는 라이더스가 오지않아 배달이 불가능하다고 하고 제입장에서는 시간 분을 시간을 날린셈이 되어버렸습니다 고객센터는 계속해서 연결이 되지않아서 업체측도 저도 취소가 불가능한 상태입니다 심지어 카톡채팅을 켰 전체 리뷰"            
##  [3] "저희집 배달비가 천원이어야 하는데 배달비인 천원으로 나와요 항상 배달시킬때마다 저희집 배달비를 내는게 아니라 최대배달비로 나가서 슬퍼요 배달비가 설정위치배달비로 나갔슴 좋겠어요 이때까지 할인 있어서 안적다가 지금적게 됬네요"                                                                                                                                                                                                                                                                                                                             
##  [4] "이용하가 쉽고 인분배달도 되고 간편하게 결재도 되고 주문부터 배달까지 중간중간 앱이나 카톡으로 안내해주니 답답하지 않고요 다만 가끔 배달이 예상시간을 훌쩍 초과하는 경우가 있어요 아마 여러군데 들러서 그런게 아닌가 싶은데 이럴 땐 배달하시는 분의 위치까지 알 수 있었으면 하는 바람도 있네요 그래도 배달의 민족 감사합니다"                                                                                                                                                                                                                                 
##  [5] "앱상에서 배달시간을 표기한다는것은 소비자 입장에서 참고사항으로 좋을지 몰라도 업체입장에서는 과도한 배달시간단축 경쟁이 됩니다 예전 모업체에서 분이내 배달 지향하다가 배달원 사고증가로 안좋은 일들도 있었습니다 배달을 빠르게 가는것도 중요하나 제대로 된 음식이 정성스레 차려져서 손님께 가야지 배달시간 축소는 이러한 부분들이 충분히 생략되기 마련이며 배달시간 경쟁으로 도로위에 내몰리는 배달원들의 안전또한 보장하지 못합니다 앱상에 배달시간 안내가 시간이 많이 표기되어있으면 그것을 줄이려고 단시간 안내를 하게되며 기다리는 손님또한 참 전체 리뷰"
##  [6] "라이더 지정 차단 기능 있었으면 좋겠어요 불친절한 라이더에게는 배달 요청이 뜨지 않도록 할 수 있게 해 주세요 배달 거지 당해 보니까 기분이 너무 나빠요 기부했다 생각할 수도 있지만 씻지도 않은 손이 닿았을게 너무 더럽고 찬 겨울 바람이 닿아서 눅눅하고 맛 없게 먹게 됩니다"                                                                                                                                                                                                                                                                                    
##  [7] "많이쓰다보니 편하기는한데 배달팁이 너무 부담스러워요 장기적으로 쓸때 이벤트나 다양한 혜택이 한번씩이라도 있으면 좋을거같아요 지난번 반찬집 배달시에 배달팁을 배달후 요청해서 당황했어요 자세히 보고 주문했어야하는 제 잘못도 있지만 어떤건 배달팁 같이써있고 같이 결제되는데 상품구매후 별도 배달팁요청 부분은 좀 그랬습니다 확실히 눈에 잘보이게 개선되어 주문시 착오없게되면 좋겠어요 반찬가게등도 웰빙등 더 많이 업로드 부탁드립니다 감사합니다"                                                                                                          
##  [8] "예약배달 카톡 메시지가 혼란스러워요 수정좀 해주세요 예약안내시 고객님이 주문하신 음식이 오후 오후 시에 배달될 예정입니다 뭐라는건지 주문일시 주문번호 나옴 주문번호 가게이름 나옴 가게 메뉴 나옴 메뉴 배달주소 나옴 배달주소 예약일시 나옴 예약일시 예약시간 이대로 나옴"                                                                                                                                                                                                                                                                                    
##  [9] "배달하시는분 짜증내시는거 정말 돌아버리겠네요 저도 그분에게 짜증은 안냈지만 제가왜 제돈내고 밥먹으면서 그분 짜증을 받아줘야되나요 그리고 찾기힘든 주소도 아니고 주소도 못찾는 이유는 뭔가요 이부분은 배민이 배달하시는 부분 교육 체계가 없어서 인것같아 김선생님이 피해보시는 부분이라고 생각됩니다 안전하게 천천이 이 오라고 적어놨는데 굳이 전화를 걸어거 분안에 간다 드립은 왜치시는 걸까요 그안에 오지도 못할거면서 잘못찾아가고 짜증이나내고 배달리스크 줄이지 못하면 요기오나 배민이나 차이가 뭡니까 김선생님 건승하시고 배민은 정말 하는일 전체 리뷰" 
## [10] "배달안되는 지역이면 위치설정하면 안뜨게 해야하는거 아닌지 배달안되는 지역이라고 빠꾸먹는게 지금 몇번째입니까"                                                                                                                                                                                                                                                                                                                                                                                                                                                
## [11] "배달의민족앱 영업시간 계란조심눈꽃빙수 에그타르트이미지 수미돈까스안락점이미지 배달기사거래내역 건입니까 김혜림님배달의민족앱 카카오톡앱업데이트내용을않았습니까"                                                                                                                                                                                                                                                                                                                                                                                            
## [12] "빠른 배달 좋아요 마트는 지역에 따라 되고 안되고 하나요 배민배달 지역인데 아이콘 조차 보이질 않네요 경기 남부지역은 마트 안되나요"                                                                                                                                                                                                                                                                                                                                                                                                                            
## [13] "항상 잘 이용하던 앱입니다 하지만 이용시 버그가 있네요 다른 카테고리에서 어떤곳은 배달팁공제가 되고 어떤곳은 안되는데 이게 앱을 껏다키지않으면 무조건 배달팁이 나오게끔 되어있는듯 싶습니다 아무리 배달팁이 큰돈이 아닐지라도 모르고 결제하시는 분들 상당히 되실 듯 싶네요"                                                                                                                                                                                                                                                                                   
## [14] "진짜 별로네요 도착예정시간보다 분넘게 늦게오고 배달 현황 보니까 완전 다른 동네에서 빙글빙글 돌던데 다른 배달을 하는건지 길을 헤메는건지 다른 배달이면 같은 동네에서 하던가 길을 헤메는거면 배달일을 하면 안되는거 아닌가요 직원 교육좀 시켜주시구요 앞으로 이런 일은 없었으면 좋겠네요 그리고 어느 순간부터 배달 현황이 안보이던데 이거 수정해주세요"                                                                                                                                                                                                        
## [15] "배민 정말 애용했는데 이제는 믿고 거릅니다 합병되더니 초심잃고 업주랑 소비자한테 단물만 쏙 빼먹으려고 하는거 진짜 보기싫네 그렇게 하지마세요진짜 배신이다 배민에 쓴돈이 얼만데"                                                                                                                                                                                                                                                                                                                                                                               
## [16] "배달앱은 이것만 썼는데 신랑이 다른거 쓰라해도 꿋꿋하게 썼는데 뭔가 뒷통수맞은 기분이랄까 탈퇴합니다 좋은 배달앱 알고 계신분들 좀 알려주세요"                                                                                                                                                                                                                                                                                                                                                                                                                 
## [17] "새로운 배달앱이 생겼으면 합니다 여기요를 하는 독일 기업이 독일에선 배달 서비스를 접고 우리나라에 투자한다더니 배달의 민족을 인수해서 독과점 업체가 되었네요 이건 아니죠 전화보다 앱 주문 시 빨리 오는 것 같아 앱을 이용했는데 앞으로는 전화로 주문해야겠네요 사장님들도 후기 의식해서 배달앱 위주로 하신다면 앞으로 힘들어 지실거예요 삭제합니다"                                                                                                                                                                                                            
## [18] "주당 건 이상 이용합니다 아니 이용했습니다 앱삭제 했거든요 단골집은 방문포장 하던가 전화주문 할게요 배민 없던 시절도 행복했거든요 수수료 마니 남겨서 때부자되세요"                                                                                                                                                                                                                                                                                                                                                                                            
## [19] "자주시키는데 지도 설정이 잘못돼서 그런다 업체랑 의견 조율이 안돼서 그런다 배송업체가 늦어져서 그런다 등등 이 배달업체가 왜 있는지 모르겠습니다 그냥 음식점에 배달 시카는게 맘 편하지요 배민은 비추합니다"                                                                                                                                                                                                                                                                                                                                                    
## [20] "업체 수수료 적다고 해서 이용한건데 코로나 여파로 최악의 경기에 수수료를 올리다니 배달앱 이용자로서 믿거하겠습니다"                                                                                                                                                                                                                                                                                                                                                                                                                                           
## [21] "배달을 주업무로 하는 업체에서 지도를 년에 한 번 업데이트 할까 말까 실제로 어플에서 보여는 지도는 적어도 년 전 지도네요 도로명주소가 집주소가 아니라 도로 그 자체의 이름이라고 알고 있는 고객센터 팀장님은 무엇인가요 주소에 대한 기본적인 상식도 없는 분이 배달 중개업체 고객센터 팀장이라니 믿을 수 없네요 도로명 주소에 매칭되는 지번주소를 선택할 수 없는 것을 알면서 도로명주소를 입력했어도 지번주소까지 옳게 입력됐는지 확인 하라는 것은 배민의 갑질 아닌가요 도로명과 매칭되는 지번주소가 다른 주소라는 것을 확인했으면서 전체 리뷰"                  
## [22] "배달시키는것 배달종류 다양하고 좋은데 배달걸리는 시간을 미리 볼수있게 해줘야지 시키고난다음에 카톡으로 뜨면 어쩌라는거죠 오래걸리는데 일일이 취소하면 가게도 손님도 불편한거 아닌가요 개선요지가 필요할것같습니다"                                                                                                                                                                                                                                                                                                                                           
## [23] "배민 라이더스 배송관련해서는 개선이 필요하다고 봅니다 저도 워크맨이나 다른 유튜브 영상을 봐서 번에 건의 배달로는 수지타산이 안맞는다는 점을 알고 이해하고있는데요 저희집에서 도 채 안걸리는 단골가게에서 주문했는데 걸어서도 분 걸리는 거리를 자전거를 타면 분 걸리는 거리를 오토바이 타고서 분이 넘게 걸렸더군요 심지어 중간과정 보니 저희집보다 훨씬 먼 다른집을 군데 정도 들리는 모습에 어이가 없었습니다 게다가 지하철역조차 다른 몇키로는 떨어진 다른동네까지 한참을 헤매이다 오더라구요 정말 어이가 없었습니다"                                        
## [24] "배달이 되는 음식점도 거리가 좀 있어서인지 음식점 여러지점들이 안떠요 배달되는 지역들은 다 음식점 떴으면 좋겠습니다"                                                                                                                                                                                                                                                                                                                                                                                                                                          
## [25] "한마디 하려고 앱 깝니다 그냥 음식배달한번 시키겠다는데 뭐이리 절차가 많아요 주소만 알면 충분할것 같은데 쓸데없는 잡정보 하나하나 기입하다가 맥빠져서 항상 포기하네요 이런 배달어플이랑 전화배달을 병행하는 매장이면 그냥 편하게 전화한번으로 끝내겠는데 배달의 민족 하나로만 배달하도록 되어있는 매장은 시킬 엄두가 안나요"                                                                                                                                                                                                                                  
## [26] "주소가 잘못된 주소 나오는데 수정도 못하게 막아놔서 상세주소에 주저리주저리 길게 적어놨는데 제대로 올지나 모르겠다 문의는 글 못 적게 닫아놓은듯 안 들어가짐"                                                                                                                                                                                                                                                                                                                                                                                                  
## [27] "시급알바생들 쥐어짜서 돈벌면서 이미지메이킹만 열심히 하는 배민 불매합니다 기사님 한건에 원 받고일하는데 배달 사고났다고 음식비용 전액 기사부담에 회사 도 책임안지고 발빼는거보고 앱 지웁니다 배달수수료는 퍼 가까이 가져가면서 책임은 퍼네요 국가 제도적으로 많은 보완이 필요해보입니다"                                                                                                                                                                                                                                                                     
## [28] "요즘 자주 사용하고잇는데 배달써비스는 맘에들어요 근데 배달비용이 조금 비싼데가 있네요 그래서 별한개 뺏어요 그래도 맛난음식 배달해주셔서 감사합니다 사장님 번창하세요"                                                                                                                                                                                                                                                                                                                                                                                        
## [29] "너무나도 신속하고 정확하며 친절하게 응대를 해주시는 배민 라이더 분들의 수고로 인해 집에서도 편하게 받아서 식사를 할수있도록 해주시는 모든것이 너무나도 감사를 드려요 배민라이더 모든분들 파이팅"                                                                                                                                                                                                                                                                                                                                                             
## [30] "평소 배달음식을 자주 시켜 먹어서 많은 도움이 되는 앱입니다 다만 조금 원하는 게 있다면 배달 시간 예약 서비스가 생기면 더욱 편리할 것 같아요 몇 시에 도착하게 설정을 하면 음식점 측에서 그 시간에 맞춰 배달을 해주시면 더욱 좋을 것 같네요 원하는 시간에 맞춰 음식 배달을 시킬 수 있으면 좋겠네요"                                                                                                                                                                                                                                                             
## [31] "메뉴가 참 다양해서 좋음 다만 메뉴 가격이나 편리성이 무색해지는 최소주문금액과 배달팁이 큰 단점 메뉴 하나가 천원 해도 최소주문금액이 만원이면 결국 만 천 주고 인분 시켜야됨 거기다가 배달팁도 있음 차라리 배달팁을 더 주고 인배달을 시켜주든가 인분 이상이 배달이라고 하든가 이해가 안되는 시스템"                                                                                                                                                                                                                                                            
## [32] "라이더에 대한 리뷰를 쓸 수 있었으면 좋겠어요 가게에서는 아까 출발했다는데 확인하니 라이더가 여러군데 들렀다가 오느라 늦는 거였어요 음식은 다 식고 맛없어졌는데 가게 리뷰에 써봤자 라이더 때문이다 어쩔 수 없다고 하니 할 말 없고요 라이더 평 안 좋은 사람은 배달 못 하게 하거나 정지 먹이거나 해야 이런 일이 없지 않을까요"                                                                                                                                                                                                                                  
## [33] "전반적으로 다 만족해서 쓰고 있는데 예약주문이라는 기능을 가게에 충분히 인지시켜주시고 받아들인 업체만 사용할 수 있게끔 했으면 좋겠어요 예약주문 할 때마다 바로 배달와서 당황시키고 주문 요청사항에도 예약주문이라고 까먹을까봐 적어놨는데 그쪽에서 이해를 못해서 주문 잘못한 거 같다고 하고 얘기를 더 해줬는데도 바로 배달을 와서 서로 불쾌하고 난처한 상황이 일어나는데 충분한 설명을 업체 측에 해주셨으면 좋겠네요 이해도 못한 가게에서 사용할 수 있게 허용해두고 주문자 탓으로 돌리는데 서로 감정만 상하네요"                                             
## [34] "리뷰에 공감하는거 왜 없어졌죠 갈수록 소비자보다 업주위주로 돌아가는듯 리뷰에 공감하는거 다시 원상복구 시켜주세요"                                                                                                                                                                                                                                                                                                                                                                                                                                            
## [35] "주소가 분명 배달 가능 지역인데 배달이 안 된대요 버스로 시간 거리는 배달이 되고 버스로 분 거리는 배달이 안 된다고 빠꾸먹다니 대체 뭘먹으란건지"                                                                                                                                                                                                                                                                                                                                                                                                               
## [36] "가까운 동네안에 다양한 메뉴들을 편리하게 시킬수 있어서 좋다 참치회나 육회 자취생이 해먹기 힘든 음식들 커피나 디져트같은거도 배달되서 개인적으로 자취인들한테 참 좋은거같다"                                                                                                                                                                                                                                                                                                                                                                                  
## [37] "님들 그거 아셔야해요 배달의 민족 독일기업으로 넘어간지 오랩니다 바뀌고 이 난리 났구요 저는 더 이상 안쓰려구요"                                                                                                                                                                                                                                                                                                                                                                                                                                               
## [38] "배민 비마트 전 지역에 있는거 아니였나요 왜 저희지역은 없는 거죠"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
## [39] "오류 배달지역 바꾸고 검색했는데 검색 결과가 배달지역 바꾸기 전의 지역의 가게가 나와요"                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
## [40] "멀리까지 보기 기능 다시 안되는건가요 잘쓰고있었는데 업데이트하면서 기능이 없어도 배달되는 곳은 뜬다고 하는데 지역이 지역이다 보니 전혀 뜨지 않습니다 배달비 주고서라도 자주먹던 곳들이 업데이트되면서 주문을 못하네요 다시 검토 요청부탁드립니다"                                                                                                                                                                                                                                                                                                            
## [41] "배달의민족 어려운 생활 속에 왜 욕심을 부리십니까 저희 가게도 배달어플을 이용중인데 건당 돈을 걷어가는 형식이였으나 한건당 원씩 받는다는 소리가 들렸습니다 배달 위주로 쓰는 저희 입장에선 너무나도 속상합니다 배달의 민족 너무나 좋은 지금 이대로 변치않았으면 하는 바램으로 작성해봅니다"                                                                                                                                                                                                                                                                    
## [42] "주소 입력이 안되어서 열받았습니다 고쳐주세요 동으로 입력 했는데도 안되어서 이런 리뷰를 남긴겁니다 피드백 빠르시네요 다른거 다 너무좋았는데 제일 중요한 주소지 등록이 안되어서 정말 화났었어요 근처에 다른 상징적인 건물로 대신 설정하고 제가 직접 받으러 갔다올 뻔했거든요 기사님이 요청사항 보고 찾아와주셔서 다행이죠 배달앱이 집까지 와주는게 좋은점인거잖아요 주소지 입력안되면 배달앱 사용할 이유가 없죠 개발자님 기분상하지 않으셨으면 좋겠네요"                                                                                                       
## [43] "안그래도 배달업체 이용하면 거기서 배달한번에 천원 거리가 멀면 천원이상 떼어가는데 거기서 수수료까지 내라고 하면 그냥 다 죽으라는 것밖에 안될뿐더러 이러면 음식값을 올릴수 밖에 없어짐 그러면 소비자들은 안사먹고 자영업자들은 죽어나가는거지"                                                                                                                                                                                                                                                                                                                
## [44] "주문앱이 요기요와 비교했을때 그림 사진들이 조금 산만하고 주문하기가 불편함을 느꼇다 마치 삼성전자제품과 엘지전자 제품을 쓰는 느낌이랄까 앱을 전반적으로 개발 수정할 필요성이 분명 있어보인다"                                                                                                                                                                                                                                                                                                                                                                
## [45] "배달비를 물거면 우버잇츠를 좀 보고 배우세요 최소한의 팁을 주는데 배달위치도 못보면 누구를 위한 앱인지요 수수료를 제가 배민한테 지급해야됩니까 앞으로 가게 전화주문으로 갑니다"                                                                                                                                                                                                                                                                                                                                                                               
## [46] "도대체 배달이 안되는 곳에 주문은 왜 되나요 주문 후 나중에 취소 연락이 오는게 짜증나요 배달비가 만원이 넘는곳은 왜 미리 공지하지않나요 배달비가 만원이 넘는건 너무 심하지 않나요"                                                                                                                                                                                                                                                                                                                                                                             
## [47] "그냥 그런 앱 배달 안 되는 구역이 너무 많고 인분은 배달 되는게 없고 거의 모든 음식점이 다 보면 거리 멀다고 추가 배달비 받으시고 멀다고 배달 안 된다는 음식점도 많고 시켜먹을만한곳은 몇곳 안되는 그저그런앱이네요"                                                                                                                                                                                                                                                                                                                                            
## [48] "배달어플 처음깐이후로 아주잘 애용중입니다 배민깔길잘했어요"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
## [49] "빠르고 정확한시간에 배달이 와서 넘 좋아요 안전하게 배달해 주셔서 감사합니다"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
## [50] "이번 쿠폰사태로 인해 유저들이 떠나고 있는데도 아무 조치도 취하지 않고 쿠폰 뿌리기 멈추고 잠깐 사과 공지 올렸다 그마저 현재 지운상태 마케팅팀은 다시 사람들 데려올 생각을 하던가 업주들은 무슨 잘못입니까 업주들에게 연락 을 돌리던가 조치를 취해야 하지 않습니까 당장 인터넷 곳곳과 주변에서 배민 어플을 지우고 요기요를 깔고 있다 말하는 실정인데 당신들은 뭔데 손가락만 빨고있습니까 이렇게 운영하면서 수수료계속 받아먹고 있습니까 강건너 불구경하듯이 구경하지말고 빨리 조치좀 취해주십시요 업주들이 단체로 합심해서 등록 전체 리뷰"

=> 첫 번째 토픽은 ‘배달의 민족’ 의 가장 기본적이고 근간이 되는 서비스인 ’배달 서비스’이다.

토픽 내 리뷰들에서 ‘배달’, ‘라이더’, ‘주소’ 등의 단어가 사용된 것이 확인되었으며, 특히 ’배달’이라는 단어는 상당히 많은 수의 리뷰에 사용되었다.

어플 이용시의 불편 및 서비스 개선 사항 보다는 라이더가 제품을 픽업한 후 고객에게 전달하는 것을 뜻하는 배달 (라이더) 서비스와 배달 불가 지역에 대한 의견이 주로 도출된 것이 확인된다.

‘배달의 민족’ 어플리케이션 서비스 개선도 필요하지만 가장 기본적인 딜리버리 (주소 전달 - 라이더 픽업- 고객 전달) 서비스의 개선 역시 필요하다는 것을 알 수 있다.

# 토픽2 내용 살펴보기
reply_topic %>%
  filter(topic == 2) %>%
  pull(reply)
##  [1] "우아한형제들이 돈에 환장하는구나 월 매출 로가 정말이냐 진짜 배신의 민족이구나 금액에 제한이 있는 정액제보다 매출 규모에 따라 수수료가 기하급수적으로 증가할 수밖에 없는 정률제가 사용자인 소상공인들에게는 큰 부담이 되는 것 이라며 월 매출 만원의 업소인 경우 만원 월 매출 만원 업소의 경우 만원을 내야 하는 것이다 라고 설명했다 또 기존에는 울트라콜 건을 이용하면서 만원에서 만원 정도를 내면 되던 것이 수십에서 수백만원의 추가 비용을 물어야 하는 상황이 되는 것 이라고 주장했다"                                                  
##  [2] "오픈서비스로 바뀐 이후 득인 사장님과 실인 사장님의 비율이 같으면 뭐합니까 총 수수료액으로 보면 실인 사장님들이 내는 수수료가 득보는 사장님들보다 배의배의배로 많은데요 득실 보는 사장님 비율이 비슷하다며 회피하려 하지말고 실제 배민에서 받는 총수수료가 오픈서비스 전과 어떻게 달라졌는지 실제 이익을 투명하게 공개바랍니다 제 예상에 배 배 는 뛰지 않았을까요 한달에 약 천건정도 되는 매장은 한달에 내는 수수료가 만원이네요 만 천원에서 정확히 배 뛰었네요"                                                                          
##  [3] "일부업체의 깃발꽂기때문에 전체수수료율을 정액제에서 정률제로 변경하셧다구요 배민이 수준이 낮은건가요 대한민국 국민을 개바보로 아는건가요 일부업체의 깃발꽂기가 문제라면 깃발꽂기를 방지할 시스템을 도입해야지 왜 다른 업체들 빨대꽂아서 배민 배불릴려고 하죠 예로 깃발 개꽂으면 만원이며 개째꽂는곳은 만원 개째꽂을때는 만원 문제에 대한 방지책을 강구해야죠 손바닥으로 하늘을 가리지 마세요 정도를 가지않고 잔머리와 술수로 사람을 대하는 기업은 오래가지 못합니다"                                                                     
##  [4] "결국 스스로 복을 차버린 꼴 이시국에 안그래도 힘든 소상공인들한테 수수료를 올려받아 원래 수수료 만원 정도 내던 사장님이 만원으로 늘었다고 속상해하시던데 순이익을 사장님보다 많이 가져가는건 진짜 심하지않냐 사고방식이 정상이 아니라고밖에 볼 수가 없다 게르만 민족은 이제 꺼져라 너흰 이제 끝났어"                                                                                                                                                                                                                                      
##  [5] "대형 가게든 소형 가게든 깃발 제한을 두면 될것을 한업소에 개정도로 애초에 제한을 두던지 아 깃발 많이 팔아 건당 부가세포함 원씩 많이 팔아드실라고 그랬겠죠 깃발 실컷 백날 팔아봐야 주문건당 받는 수수료에 못미치는 수익이니 건당 수수료로 바꿨을것이고 배민덕분에 배달집들 먹고사는거 인정 하나 시국을 좀 봐가며 수수료를 올리던지 해야하지 않겠습니까 그리고 오픈서비스 가입했는데 왜 내가게는 새로고침을 백번이고 넘게해도 최상단에 노출안되는건지 그 공정성이라는 기준은 뭔지"                                                          
##  [6] "배달의 민족 배달의 게르만 배신의 민족 메뉴판만 쓰다 버리겠습니다 그동안 써준게 있으니 아닥하고 계시길 상생이란 단어를 아는 기업이라면 지분팔이 안했을것이고 전국민 전세계가 힘든 이상황을 이용해 내배만 더불리겠다는 의지로만 보일정도의 욕심이 과했네요 대한민국국민이 바본줄 배민안쓰고 전화하는 일이 귀찮아도 불매합니다"                                                                                                                                                                                                             
##  [7] "배달의민족 꼼수 대단하시네요 오픈서비스 수수료 올려받구 울트라광고 하단에다 갖다깔구 참나 기가막히네"                                                                                                                                                                                                                                                                                                                                                                                                                                    
##  [8] "별 하나도 아까운데 솔직하게 까고 말 할게요 님들 어플 정말 잘 썼습니다 만족도 많이 했는데 날이 지날수록 배달비가 오르더군요 특히 배민라이더스가 나오면서 배달비를 조금씩 올리더니 배달 자체에 부담이 갈 정도로 바뀌었습니다 그런데 이번 코로나 이후 자영업자 부모님이 너무 힘들다며 배달을 시작하려 하시길래 직접 배민에 대한 정보를 모았습니다 가격도 어느정도인지 확인하던 도중 배민 직원이 직접 와서 한 말이 오픈서비스 강요더군요 한 달에 만원 팔까 말까한 동네 장사집에 오픈 서비스 강요를 하길래 뭔 말이냐 하니 정책이 바 전체 리뷰"
##  [9] "지방이라 그런지는 모르겠지만 제 단골매장들은 오픈서비스 안했네요 어차피 다들 랭커들이시라 찜도 많고 오픈서비스 따위 아니어도 단골들이 줄줄이라 제 최애 밥집은 오픈서비스를 하거나 말거나 신경도 안쓰네요 울트라콜에서 번째인가 번째에 있던데 저는 삭제는 안하겠습니다 사랑하는 단골 밥집 사장님들 순익엔 차이가 없으므로 배민은 망하든 수수료 내리든 니들 꼴리는데로 하시구요 밥집 사장님들 힘내세요"                                                                                                                                    
## [10] "수수료가 프로면 소상공인 한개팔면 프로 언저리 남는데 수수료 프로빼면 소상공인은 나머지 프로에서 이것저것빼면 굶어 죽으라는 말인가 그럼 업주들이 더 안좋은 재료 쓰겟지 품질도 안좋아지겟지 삭제가 정답이다"                                                                                                                                                                                                                                                                                                                               
## [11] "독일업체의 독점이라서 그런가 수수료가 너무 비싸요 배달의 민족 배달통 요기요가 독일업체꺼라 그런지 수수료가 너무 부담되네요"                                                                                                                                                                                                                                                                                                                                                                                                              
## [12] "그동안 게르만 민족이 되네 어쩌네 해도 제일 처음 쓰던 앱이라 안지우고 써왔는데 이번 수수료건은 너무했네요 난 게르만 민족이 아니니까 이제 지울랍니다 하필 이시국에 그러냐"                                                                                                                                                                                                                                                                                                                                                                 
## [13] "울산대서 장사하고 있는 개인사업자입니다 수수료 프로 인상 그인상으로 인해 소비자가격 인상 오픈리스트 울트라콜 해지 평균 만원 하던매장 만원도 팔기힘들다 내돈주고 내가 광고 해서 손님들에게 보여준다는데 왜 없애서 매출을 떨어뜨려놧냐 참고 저는 대행업체 쓰는 개인사업자입니다 수수료 프로 인상 사업자 남는거없음 소비자가격 증가 소비자불만 매출하락 사업자불만 유통식자재 사용량 감소 대행업체 일거리감소 이게 전부다 위한일 입니까"                                                                                                    
## [14] "음식점 리스트 중 수수료 가장 비싼 오픈리스트 기존 랜덤 개가 최상단에 떴는데 이젠 제한 없음 오픈리스트 가입하지 않으면 가게가 보여지지 않음 점주들 수수료 오지게 빼먹으려고 꼼수 점주들이 고객한테주는 쿠폰도 오픈리스트 가입자만 줄 수 있게함 오픈리스트에 안올리면 아래에 묻히고 고객한테 쿠폰 제공도 못하고 이건 강제고 횡포입니다"                                                                                                                                                                                                    
## [15] "자영업자들과 상생하기보단 독과점 이용해서 수수료 올리는데 크게 실망스럽네요 코로나로 가뜩이나 어려운 자영업자들을 위해 수수료 인하는 못할망정 수수료 개편을 통해 돈이나 더 벌궁리나 하다니 자영업자들 다 망하면 배민 혼자 살수 있나 탈퇴합니다 걍 전화해서 시킬랍니다"                                                                                                                                                                                                                                                                   
## [16] "배민대표 임직원분들에게 직접 말하고싶은데 어떻게 할수있는 방법이 없네요 그동안 배민 덕분에 장사 잘했습니다 저희뿐아니라 배달전문점들 배민덕 많이 보셨을꺼예요 근데 오픈서비스 도입후 오히려 매출이 떨어졌어요 코로나때문에 오프라인 매장들이 죽어나듯 오픈서비스 도입후 배달 매장들이 죽어나고 있습니다 배민 매니저에게 물어봐도 광고정책은 변경되지 않을것같다고 하는데 수수료도 문제 이지만 광고 정책부터 변경해주세요 울트라콜로 다시돌아갈수 없다면 수퍼리스트를 다시하던 개선책을 내주세요"                                         
## [17] "왜 앱 다운로드도 인증 통해서 연옌만 가능하게 하시죠 사과문도 단어 선택에 구린 구어 문장까지 무슨 초딩이 쓴 줄 앞으로 특혜로 해석 될 수 있는지 검토하겠다구요 정신 못 차렸네 그냥 특혜입니다 대학교 등에도 찾아가서 나눔의 정신을 실천했다구요 연옌한테 했듯이 신청도 안 한 사람들한테 두당 몇 십장씩 줬어요 그렇게 시켜도 포인트 백원 단위로 모이던데 연옌들한테는 만원 쿠폰을 뿌려댔네요 덕분에 다른 앱 다운받으러 갑니다"                                                                                                              
## [18] "수수료 인상 타이밍 잘못잡았다 그쳐 에구 조용히 다른 사건 하나터질때 올리시지 안그래도 코로나때문에 힘든 자영업자들 다같이 죽자는 회사마인드 잘봤습니다 다신 안씁니다"                                                                                                                                                                                                                                                                                                                                                                    
## [19] "고생은 장사하는 분들이 다 하는데 하는 역할과 제공하는 가치에 비해 너무 많은 이득을 챙겨간다 운 좋게 플랫폼을 선점했으면 순풍순풍 나오는 황금알에 만족해야 할 것을 욕심이 너무 커 거위 뱃대지를 찢다가 이 꼴이 났다 세준 가게에 장사가 잘 되면 슬쩍 임대료 올려서 낼름 불로소득 챙겨가는 건물주 심보에 민족이란 이름이 무색하다 손절하고 대체할 앱이 나올 때까지는 전화로 시키련다 도무지 밥맛이 떨어져서 여기서는 더 이상 못 시켜먹겠다 리뷰 관리하는 분과는 무관한 일인텐데 죄송합니다"                                                 
## [20] "뭐 여러업체들 하는것때문에 수수료개편 그럼 작년대비 올해평균을 제시해봐 너희의 매출이동일한데 많은사람한테 이익이돌아간건지 볼수있잖아 삭제"                                                                                                                                                                                                                                                                                                                                                                                             
## [21] "배신의 민족 수수료증가 이제 안씁니다"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
## [22] "요즘같이 어려운 시기에 먹는 것으로 위로삼고자 하는 고객들을 이용해 지역음식점 사장님들의 부담을 가중시키는 배민을 이용하지 않겠습니다 그동안 참 편리하고 감사한 마음으로 이용해왔는데 내 편의를 위해 누군가를 힘들게만 만드는 배민을 계속 이용하는 것은 아이들 보기에 부끄러워 더이상 하지않겠습니다 손가락 품 조금 더 팔아 주문해 먹겠습니다 그동안 감사했습니다"                                                                                                                                                                       
## [23] "바뀌고나서 보기 너무 불편합니다 요기요와 합병 후 배달앱 시장이 독과점되어 이용하기 너무 불편합니다 온갖 가상업소들이 생겨나는데도 모른체하고 있는 배달의민족 진짜 배달의민족이 맞는지 궁금하네요 소비자 기만을 일삼는 배달의민족 신고하고 싶습니다"                                                                                                                                                                                                                                                                                      
## [24] "배신의 민족 탈퇴했다 지금 시국에 은근슬쩍 수수료 인상이라니"                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
## [25] "수수료 인상 너무 실망스러워요 삭제합니다 소상공인 다음이 어플입니다 생각좀 합시다 게다가 이 시국에 수수료 인상이라니요"                                                                                                                                                                                                                                                                                                                                                                                                                  
## [26] "요새같은시대에 소비자들이바보도아니고 수수료인상은결국소비자에게 가격인상으로돌아오는게 뻔한대 어플하나개발하는건일도아닌 요새시대에 점유율만믿고 무리한 수수료를 받으신거같네요 안그래도 요기요랑번갈아가며쓰다가 인수된거보고 좀그랬는데 경쟁자가없어짐에따라 결국 소비자혜택이줄어들듯 이젠 배민안쓸랍니다"                                                                                                                                                                                                                           
## [27] "안녕하세요 순대국집입니다 수수료 광고제외 정말 기본 를 듣고 어떤 정신으로 앱의 수수료를 이렇게까지 높였을까 생각했습니다 몇년 전 수수료부터 지금까지 조금씩 숨통을 잡고 턱밑까지 끌여올렸습니다 배달앱 참 좋지만 수수료 대까지 인하해주세요"                                                                                                                                                                                                                                                                                             
## [28] "수수료 인상해서 가뜩이나 이 시국에 어려운 소상공인들 등골빼먹는거 보고 회훤탈퇴 앱 삭제합니다"                                                                                                                                                                                                                                                                                                                                                                                                                                           
## [29] "요기요 주문건당 수수료 배민 수수료 주문건당 너무하네요"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
## [30] "이 시국에 자영업자 분들한테 떼는 수수료 인상했다고 듣는 순간 사용할 마음이 싹 사라짐 앱 지우러 갑니다"                                                                                                                                                                                                                                                                                                                                                                                                                                   
## [31] "이번에 수수료 정책변경했던데 오픈서비스를 쓰지 않으면 저 밑에 검색하기 힘들게 바꿔놓으셨네요 겉으로만 점주들 위하는 척하는 위선업체는 사라졌으면 좋겠습니다 제발 경쟁업체 생겼으면 하는 바램입니다"                                                                                                                                                                                                                                                                                                                                      
## [32] "업데이트 이후 쿠폰들에 최저요금 생긴 것 너무 불편하고요 서비스하는 앱과 영업점의 꼼수로 밖에 안 보입니다 개편하기 전 버전이 더 좋았습니다 이유가 있어서 개편했겠지만 이런 식으로 할 거면 왜 괜히 바꿔서 불평 나오도록 운영하시는 거죠 도대체 어느 담당자가 사전 조사도 없이 불편하도록 업데이트 하신건지 몰라도 소비자 중심보다는 자사 중심으로 운영하기로 결정한 것인가요 최근 논란 많은데 서비스도 점점 더 이상해지네요"                                                                                                               
## [33] "사무실이라 평일 하루에 한번 이상씩 주문하던 사람입니다 자영업자 수수료 개편 및 인상으로 저도 앱삭제 동참합니다 앱삭제하면 지금 당장은 엄청 불편하겠지만 전처럼 책자 뒤져가면서 주문해야겠네요 배달앱 독점했다고 수수료가지고 이러시면 한국사람들은 똘똘 뭉치죠"                                                                                                                                                                                                                                                                          
## [34] "가게 사장님들만 고생하고 니들이 어플의 통해 엄청난 수수료 챙기는거 이제 알았다 직접통화해서 주문할거고 그냥 단지 대신 주문을 넣는것 어플통해 넣는것 그게 배민 어플 역활인데 그렇다고 너네가 그렇게 막대한 수수료 말도 안되는 수수료를 떼가야 속이 후련했냐 바로 삭제한다 배민회사 리얼루 좀 심하네"                                                                                                                                                                                                                                      
## [35] "이번사태를 보고 앱 삭제합니다 소상공인 힘든이시기에 뒤통수를 제대로 치는모습에 크게 실망했습니다 초심을 봤을때 멋져보였는데 왜이리되셨나요 안타깝습니다"                                                                                                                                                                                                                                                                                                                                                                                 
## [36] "수수료 올리다니 생각이 없네요 모두가 힘든시긴데 그렇게 수수료 올리면 어쩌자는 겁니까 탈퇴하고 요기요로 가겠습니다"                                                                                                                                                                                                                                                                                                                                                                                                                       
## [37] "독과점 후 횡포 부리는 나쁜 기업 해외에 팔아먹고 경영진만 먹튀하더니 이제는 수수료 인상 앱 삭제"                                                                                                                                                                                                                                                                                                                                                                                                                                          
## [38] "안그래도 코로나때문에 자영업자들 등골 휘는데 이 혼란을 틈타 꼼수 수수료 인상을 계획했다는게 정말 실망입니다 독일산 배반의민족으로부터 독립합시다"                                                                                                                                                                                                                                                                                                                                                                                        
## [39] "와 깜짝놀랐네요 주문 많은 순으로 정렬해주는 기능은 왜 없앤거죠 수수료 논란에도 저는 솔직히 그러려니했는데 이제 그냥 검색용도로만 써야겠네요 를 고의적으로 해치면서까지 개편시킨 의도가 느껴져서 다시는 앱에서 주문하지 않으려합니다 정말 괘씸하네요 배신감도 느껴집니다"                                                                                                                                                                                                                                                                 
## [40] "더 귀한분을 매달 찍을 정도로 배달어플을 자주 쓰는 사람인데요 이번 수수료 개편은 아주 실망이네요 우아한 형제들 회사 팔고나니 살맛나죠 그래서 이제 막 수수료 올리겠다 이거죠 다시는 어플을 쓰지 않겠습니다 아주 실망이 크네요"                                                                                                                                                                                                                                                                                                             
## [41] "배달위치나 똑바로 설정하세요 집주소랑 다르게 행정구역을 설정했다해서 이어플만 그지같이 배달팁 자꾸붙네요 몇번문의해도 계속 기다리라하고"                                                                                                                                                                                                                                                                                                                                                                                                 
## [42] "수수료 갑질이라니 대단한 기업입니다"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
## [43] "시국이 시국인데 수수료 인상은 쫌"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
## [44] "결국 수수료체재로 바꿨다 업소사장님들의 갑"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
## [45] "소상공인 불쌍하지도 않냐 니들 요기요 모회사에 합병될때 수수료 인상은 없다며 이번에 너무 갔고 니들 이미지 개판된건 알고 있어라"                                                                                                                                                                                                                                                                                                                                                                                                           
## [46] "독과점이네 수수료 인상하네 박영선 장관과의 약속이 봉 같나보지 너넨 불매다"                                                                                                                                                                                                                                                                                                                                                                                                                                                               
## [47] "탈퇴합니다 이 시국에 힘빠지는데 일조했군요 지역앱 활성화가 여로모로 유용하고 빨리정착되길 바랍니다 그전까진 카카오맵 띄워놓고 주변검색해서 바로 전화할랍니다"                                                                                                                                                                                                                                                                                                                                                                            
## [48] "다같이 어려울 때 수수료인상안 검토하시네요 그동안 잘 썼었는데 안녕히계세요"                                                                                                                                                                                                                                                                                                                                                                                                                                                              
## [49] "진짜 실망이네요 부끄럽게도 배민이 별별 논란이 있는동안 편의성을 핑계로 계속 사용해왔습니다 하지만 그것도 이제 끝이네요 이 정도로 이용자들과 소상공 눈치를 전혀 보지 않을줄은 몰랐어요 독점이다 이건가요"                                                                                                                                                                                                                                                                                                                                 
## [50] "그냥 전화주문 하고 탈퇴할게요 수수료가 요기요 보다는 싸서 이용했었는데 담합을 한다니 여러분 그리고 모르시나본데 요기요 수수료는 대로 배민보다 배가량 높다는점 참고하세요"

=> 두번째 토픽은 ’기업 윤리’이다.

특히 대부분의 리뷰에 ‘수수료’,독과점’ 등의 단어와 함께 ‘삭제’,‘탈퇴’,‘실망’ 등의 극단적인 부정적 감정을 표출하는 단어가 같이 사용되었다.

특히, ‘수수료’ 키워드가 가장 높은 가중치를 기록하며 토픽 내 상당수의 리뷰에 등장한 것으로 확인되었다.

이 토픽은 2020년 4월 배달의 민족을 운영하는 ‘우아한 형제들’이 배달 매출의 5.8%를 수수료로 떼는 정률제를 도입하는 이슈와 관련되어 발생하였다.

또한 독일 기업 딜리버리히어로가 ‘배달의 민족’, ‘요기요’, ‘배달통’을 모두 소유하며 시장의 98%를 점유하게 된 상황에서 자영업자에게 부담을 주는 수수료 정책은 사회적으로 반감을 일으켰고 불매운동이 이어지자, 배달의 민족은 공식 사과와 함께 수습에 나섰다.

이는 서비스를 제공하는 기업의 정책이 기업 윤리를 위반한다고 판단될 때 기업에 치명적인 영향을 줄 수 있음을 보여주고 있다.

# 토픽3 내용 살펴보기 : 
reply_topic %>%
  filter(topic == 3) %>%
  pull(reply)
##  [1] "유툽동영상보고 바로 삭제함 수수료 올려놓고 상황안좋으니까 절반환급 상황을 보면서 경영을해야지 그냥 업주들 등에다가 빨대 꼽는 전략인가 아니면 그냥 이 어플 삭제해달라고 간접적으로 얘기하는건가 그래서 그냥 탈퇴하고 삭제함 차라리 인터넷보고 시켜먹는게 낫지 내가 요기요도 삭제한다 이딴 문화때문에 배달료마저 생기지 그냥 아예 개발이 될 필요가 없는 어플임"                                                                                                                                                                                                        
##  [2] "게르만 민족은 한민족과는 의식의 흐름이 다름을 알게 돼었네요 효율적이고 합리적인지는 모르겠으나 인간적이고 배려하는 마음은 덜한듯 하네요 합리적으로 사업을 해나간다는게 힘든시기에 시장지배자의 힘으로 수수료개편이라는 핑계를 대면서 수익창출 극대화를 노리다니 아무리 기업은 수익을 제 의 가치라 한다해도 시장의 상황을 무시한 배민의 결정은 이해하고 싶지도 가치도 없네요 배민이 아니면 배달음식 못먹는것도 아니고 웹서핑이나 발품 팔아서 사다먹고말지 오늘부로 배민 손절 합니다 돈많이 버시고 번창하세요 초심잃고 얼마나 번창하실지 전체 리뷰"                    
##  [3] "외국회사에 회사팔아넘겨 결국은 배달시장을 외국자본에 완전히 종속시켜 국가와 민족의영혼을 팔아넘긴 배달의민족은 일본에 나라를 팔아넘긴 일제시대 친일기업과 다름이 없습니다 가뜩이나 어려운 소상공인들 피빨아 외국회사 배불려주는 배달의민족 탈퇴와 어플 삭제합니다 배민에 근무하시는 근로자분들은 일제시대 친일기업에 소속되어 국민을 핍박한 친일파와 크게 다름이 없음을 아시고 이직을 권유드립니다"                                                                                                                                                                  
##  [4] "삭제합니다 일본제품 불매운동 시작도 처음엔 몇몇 개인에서 시작되었습니다 저도 동참하는 그 개인이 되길바라며 공공 배달앱 도입되기를"                                                                                                                                                                                                                                                                                                                                                                                                                                   
##  [5] "예전에는 포인트 적립률도 좋아서 포인트 할인도 많이 받았었는데 어느순간부터 제휴카드 안만들면 포인트 도 안쌓이네요 이젠 메뉴판 용도로만 쓸께요"                                                                                                                                                                                                                                                                                                                                                                                                                       
##  [6] "그동안 애용해왔지만 오늘부로 어플 삭제합니다 영세가맹사업장 수수료 더더더 많이 받으셔서 앞으로도 사업 번창하시길 기원합니다"                                                                                                                                                                                                                                                                                                                                                                                                                                         
##  [7] "탈퇴운동 동참하려는데 네이버 연동해 가입핬더니 탈퇴도 힘드네요 그래서 그냥 어플 삭제만 합니다"                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
##  [8] "배민이 어제부터 어플 실행하면 첫 시작화면에서 계속 안넘어가요 삭제했다 재설치해도 시작 화면에서 멈춤현상이 나타나는데 어떡해야 하나요 어제 오늘 새로 설치한 어플 프로그램없어요 기계는 입니다"                                                                                                                                                                                                                                                                                                                                                                       
##  [9] "배민 시작 때부터 이용했으며 제일 높은 천생연분 등급 인데 여지껏 이 어플만 이용하며 썼지만 쿠폰이나 혜택 얼마 주는 것도 없었어요 차라리 공평하게 다 주지말던가 배달 어플 초창기에 시작해 지금까지 올라왔지만 점점 경쟁 어플들에게 뒤쳐지기 시작할겁니다 안 쓰면 그만이다 싶어 탈퇴합니다"                                                                                                                                                                                                                                                                             
## [10] "업데이트도해보고 삭제후재설치도 해봤는데 자꾸 마켓 메뉴가 없는 구버전으로 실행됩니다"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
## [11] "설빙 인천삼산점에서 인절미빙수 시켜먹었는데 와 최악입니다 주문요청사항에 떡빼달라고 했는데 보지도않을거면 주문요청사항란을 대체 왜 만들어놓은건지 거기다 인절미가루도 위에 덮기만하고 중간엔 그냥 얼음만있고 너무 화가나서 리뷰좀 쓰고싶은데 왜 비회원은 쓰지를 못하게해놨는지 비회원이 주문한건 주문한것도 아닌가요 너무하네요"                                                                                                                                                                                                                                     
## [12] "오랫동안 자주 이용해서 누적 금액도 많고 등급이었습니다 요즘 갈수록 혜택도 없어지고 예전에는 적립 잘해주다가 수수료 핑계로 쥐꼬리 만큼 적립해주던 포인트까지 없앤다하니 어이가 없더군요 더군다나 인플루언서들에게는 일반 이용객들에게는 주지도 않는 쿠폰을 뿌려대고 있더라고요 배달의 민족이 초심을 잃은 것 같네요 그래서 더 이용할 일 없을 것 같아 방금 탈퇴했습니다 일반 이용객들과 자영업자들을 통해 번 수익으로 연예인들에게 쿠폰 뿌리니 좋습니까 많이 이용한 고객들과 자영업자들에게 혜택 돌아가게 해줄 생각은 못하고 참 실망 전체 리뷰"                         
## [13] "배달료도 너무 과하고 배달 오는 시간도 제대로 알 수가 없어서 답답한 판에 한 세번 시킨 배달원 모두 음식을 거의 던져주고 인사는 하지도 않고 갔습니다 인사는 제가 드렸지요 이게 제 매너가 잘 못 된 것 같진 않습니다 독일인 님 한국을 잘 이해 못하셨네요 왜 그많은 외국 대형 기업들이 한국에서 쫒겨났을까요 본국으로 돌아가셔서 잘 생각해보세요 참 이번에 배달료도 인상하셨대요 매장이 문닫고 사람이 죽어가는 상황인데요 번창하세요"                                                                                                                                      
## [14] "잘쓰고있다가 방금 어플 실행하니까 잘못된요청입니다 오류코드 다시시도 누르면 무한루프네요 이상해서 어플삭제하고 폰 껏다켜서 다시설치해도 똑같음 뭐어째야되는건지 집에 와이파이로 해도 똑같고 데이터로해도 똑같음 빡치네연"                                                                                                                                                                                                                                                                                                                                            
## [15] "코로나 사태를 돈벌이 기회로 보는 것 같아 정말 실망이네요 저 뿐아니라 많은분들도 비슷한 생각들이실것 같네요 수수료중 를 가맹점주들에게 돌려 주겠다는 발표도 진실성이 없어보이고 여론을 잠재우기 위한 일회성 이벤트로만 보이네요 해외에 매각도 모자라"                                                                                                                                                                                                                                                                                                                 
## [16] "너무 만족하고 있어요 늘 앞서가는 개발 자꾸자꾸 배민 서비스에 대해 곰곰히 생각해보게 되더라구요 그래서 최근에 생각하다 떠올린 부분이 있는데 혹시 통신사 할인도 연계시킬 계획이 있으실까요 통신사에서는 더블할인이나 할인으로 예를들면 베라 파인트를 한달에 한번 할인받아 살 수 있는데 요것이 어플로는 호환이 안되다보니까 아쉬울때가 있거든요 복잡한 사안들이 분명 있어서 어려울수도 있겠지만 혹시하여 리뷰남깁니다 늘 감사해요 좋은 서비스 감사합니다"                                                                                                               
## [17] "탈퇴 삭제 동참합니다 깃대가문제면 깃대만제한하면 될것을 돈 별려고 별짓을 다 하네 소상공인들을 바보로보나 어디서 말장난이지 어이가없다 깊은반성과 소상공인에게 국민들에게 사과하세요 이미 늦었지만"                                                                                                                                                                                                                                                                                                                                                                   
## [18] "덕분에 동네 없던배달료도 다 생기고 업주분들 어쩔수없이 가격 올려파는거 딱 보여서 쓰기싫어지네요 이젠 배달말고 포장해와서 먹는게 가격도 그렇고 훨씬 맘편하네요 배달팁이 있다고 불만이 있는게 아니잖아요 당신들 마음대로 동문서답 답글 달아놓고 댓글내용을 다른 의미로 무마시키려고 하시다니 배민 심각하네요 진짜 쓰레기같은 기업마인드로 어떻게 그런 큰자리를 차지하셨는지 빨리 사라져 버리길 바랍니다"                                                                                                                                                               
## [19] "삭제했다 독점인수 이후 수수료 당연히 올리겠거니하긴했지만 타이밍을 무슨 소상공인 등치는 타이밍으로 잡아서 이건 아니다싶더라 특별한 서비스를 해주는게 아닌데 너무 많이 떼먹음"                                                                                                                                                                                                                                                                                                                                                                                        
## [20] "리뷰등록한거 지워놨네 멋지다 독과점 어플 요기요가 높은수수료로 등골빼먹고 배달통 인수해서 몸집불릴때 쿠폰쏘고 수수료 조금받는 착한 어플이래서 썼더니 아니라 다를까 인수 기사 뜬 뒤로 행사하는것도 차별화된것도 없음 쓰레기어플은 삭제 답"                                                                                                                                                                                                                                                                                                                            
## [21] "여러분 배민 입점 해 있는 업체를 운영 중인 사람으로써 감사의 인사드립니다 그런데 대체될 수 있는 공공 배달앱이 개발되기 전까지만이라도 앱 삭제를 미루시고 전화연결로 주문을 주시면 입점되어 있는 상인 분들은 피해를 입지 않으실 것 같아요 사실 지금 배민 불매로 인하여 어플을 삭제하시는 분들이 많아짐으로써 배달의민족도 타격이 있겠지만 입점해 있는 상인 분들도 대부분 배달 주문이 대략 정도로 줄어들었어요 사실 꼭 필요한 일이고 이렇게 해야 독과점 행포를 막을 수 있을 거라는 생각이 커서 많은 분들이 한 마음 한 뜻으로"                                           
## [22] "한번 시켜먹고 뉴스보고 바로 탈퇴하고 삭제 안뇽"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
## [23] "음식을 만들지도 않고 유튜브처럼 컨텐츠를 제공하면서 광고를 보여주는것도 아니고 호텔어플들처럼 할인이 많이 되는것도 아니고 자체적으로 불청결 식당같은 곳들을 걸러주는 것도 아니고 단순히 광고판 주문대행만 받으면서 수수료를 얼마를 때린다고 스카이스캐너가 수수료 그렇게 떼는거 봤냐 수수료가 자영업자 주머니에서 나가겠냐 결국 소비자 주머니에서 나가는거지 차라리 유료화를 해라 정정당당하게 국뽕마케팅하다가 바로 외국에 회사팔겠다고 튀는거부터 근본이 잘못됨 직원들도 이직해라 사장대신 욕먹지말고"                                                             
## [24] "편의성에 쓰던 어플이였는데 다신 쓰지 말아야 겠다는 생각에 주저 없이 바로 삭제합니다 부디 소상공인을 위해서 생각해 주시길 바랍니다"                                                                                                                                                                                                                                                                                                                                                                                                                                   
## [25] "지금처럼 전국적으로 어려워서 상생해야 될 시기에 독일 업체가 배달시장 독점해서 수수료 올리고 횡포 부리는거 국부유출 수준이라고 생각함 도대체 어떤 사람이 저런 모자란 의견을 내는 건지 결과 생각 못 햇다는 말 하지 마세요 빨리 정신 차리세요"                                                                                                                                                                                                                                                                                                                          
## [26] "점점 점주들을 위한 어플임 절대쓰지마세요 매일 요일마다 할인하는것도 사라지고 포인트도 낮춰버리고 거의없는수준 쿠폰도 줄어들고 쿠폰금액도 낮춰지고 사람들이 몰릴수록 더욱더 소비자에게 소홀해지는 어플임 이거에대해 반박해보시죠 제가틀린말 한것이 있는지"                                                                                                                                                                                                                                                                                                            
## [27] "독과점 수수료 폭탄 주문없이 잘되나 봅시다 상공인들 살리려 고객이 앞장서겠습니다 상생없는 배민은 삭제 합니다 캠패인 동참"                                                                                                                                                                                                                                                                                                                                                                                                                                             
## [28] "이번에 인터페이스 업데이트 되면서 보기가 좀 불편해졌어요 메뉴들이 다 너무 커서 한눈에 안들어오고 레이아웃이 좀 싸구려 전단지 같은 느낌이 드네요 이전 레이아웃에 너무 익숙해져서 그런걸수도 있지만 예전 디자인이 더 배민스럽고 고급진 느낌이에요"                                                                                                                                                                                                                                                                                                                     
## [29] "오늘부로 저는 이 앱을 삭제하였습니다 이리저리뛰며 음식만드는 식당 따로 손가락 하나로 폭리취하는 업체 따로 단군신화 이래 참 돈벌기 좋은 세상이네요 노동의 댓가와 이익은 비례하지 않군요 더 이상 저는 배민을 사용하지않겠습니다"                                                                                                                                                                                                                                                                                                                                       
## [30] "쓰레기 어플 각종 미디어에선 소상공인과 함께 간다 언플하더만 뒤에선 소상공인 뒤통수 후려갈겨서 돈 버는 어플 삭제한다"                                                                                                                                                                                                                                                                                                                                                                                                                                                 
## [31] "독일 딜리버리히어로에서 배달의민족을 인수할때 좀 걱정되엇는데 최근 수수료관련 언론보도보고 회원탈퇴하고 삭제합니다"                                                                                                                                                                                                                                                                                                                                                                                                                                                  
## [32] "탈퇴까먹고 지웠다가 탈퇴하려고 재설치함 독과점아웃 공공앱 이용"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
## [33] "탈퇴못하고 앱만 삭제했는데 어찌되는거지 다시 앱깔고 탈퇴한 다음 다시 삭제해야하나"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
## [34] "탈퇴 합니다 다들 너무나 어려운 시기에 독과점 회사의 끝을 보여주시네요 자영업자분들 힘드시겠지만 다른 대안이 있을꺼에요 꼭 살아남으셔야 합니다"                                                                                                                                                                                                                                                                                                                                                                                                                       
## [35] "피빨아 먹는 독점 배달앱 지자체에서 앱 나오기 전까지는 삭제하고 일반전화로 주문해서 먹으려구요"                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
## [36] "탈퇴하고 지워야 되는데 삭제만 해서 다시 설치하고 탈퇴해야겠네요 다시볼일 없다 게르만의 민족"                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
## [37] "부정적인 의견에는 피드백이 없고 혹은 동문서답하는 모습에 환멸감이드네요 반성은 어플에 변명같은 글이 전부고 아마 지금도 똥밟았다 생각하시죠 운이 없었다고말이죠 그렇게 사용자를 무시하는 모습에 이 앱을 지웁니다 오랜동안 써왔는데 그러면 뭐합니까 호구취급하는데 아무쪼록 모든 이용자와 업주분들도 생각을 재고하시길 바라네요"                                                                                                                                                                                                                                       
## [38] "수수료 퍼 인거 보고 사용하기 시작했다가 지금 코로나때문에 배달 수요가 증가하고 실시간 검색어가 나오지 않는 순간을 노려서 수수료 체계 변경한게 진짜 스레기 같다고 생각합니다 삭제했어요"                                                                                                                                                                                                                                                                                                                                                                              
## [39] "추석 이벤트게임을하는데 뭔 터치도 제대로안돼고 마리 잘못누르면 초씩감소되는데 점이 가능합니까 터치라도잘되야지 끼어드는게 몇갠데 이거를 분안에 점을 내라고하십니까 최대 점정도로는해야지 좀 게임을 심하게만드신거같은데 쿠폰주기싫어서 이렇게 만드신거는아니시죠 터치라도 잘되게 좀 만들어주세요"                                                                                                                                                                                                                                                                    
## [40] "요기요와의 병합을 통해 배달어플업계에서 사실상 독점하는 상황과 국가적 재난상황에서의 수수료 인상은 있어서는 안됩니다 삭제하겠습니다"                                                                                                                                                                                                                                                                                                                                                                                                                                 
## [41] "마켓 주문했더니 배송출발 찍어놓고 물건 없다고 다른 물건으로 대신줘도 되냐함 심지어 용도도 다른 물건이었음 앞으로 이용할일 없을듯 다른분들도 주의하세요"                                                                                                                                                                                                                                                                                                                                                                                                              
## [42] "예전에 설치 했다가 삭제하고 이번에 다시 설치 했는데 개선이 많이 됐네요 사용하가 편하고 배달되는 진행사항이나 배달오시는분 사진을 미리 확인할수 있는 점이 특히 좋았어요"                                                                                                                                                                                                                                                                                                                                                                                              
## [43] "양심없는 독점횡포기업"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
## [44] "탈퇴할께요 별하나라도 붙혀야 게시가되서 별하나 드립니다"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
## [45] "이번일로 실망해서 탈퇴했습니다 다시는 사용할일없을듯하네요"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
## [46] "뉴스보고 탈퇴함"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
## [47] "독과점횡포 실망입니다"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
## [48] "최고 최고 근데 배달료는 쪼옴"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
## [49] "상생하셨으면 좋겠어요 돈만보지말구 사무실에만 계시다보니 죽어가는 자영업자분들의 신음이 들리지않나요 노르만형제님들 통장에 입금되는돈만 더많아지면 되는걸까여 그렇게하면 사람들의 외면을받지않을까여 어려울때일수록 파트너십을 가진 업체분들을 더 챙겨주고 혜택도 늘려주고 한시적으로라도 개월간 수수료안받기 운동이라도 해보세요 팔아주는사람입장에서는 영업하시는분들 고혈까지 짜내가며 불편한소비하고싶진않아요 우아한형제 진짜 실망이에요 돈만벌고 날르면 단가 인수하신분도 실망이에요 인수하신지 얼마나되었다고 벌써 본전생각이 나나요 생명을입양하셨 전체 리뷰"
## [50] "모두를위한 수수료였다고하지만 결국 소규모업장이 아끼는수수료는 코딱지만하고 잘되는업체는 세배네배씩 걷어가는 새수수료정책 잘봤습니다 민족팔이장사하지마세요 탈퇴하려고다시깝니다 다시는사용안해요"                                                                                                                                                                                                                                                                                                                                                                   
## [51] "정말 화가나서 참다참다 씁니다 정말 어플 중에 최악이네요 주문하기 더 쉬워졌기는 무슨 오픈서비스에 업체 다 올려놓고선 사장님들 등골 휘어지게 할껍니까 다시 예전으로 해놓으세요 그리고 동일한 가게 여전히 반복적으로 보이거든요 일처리를 왜 이딴식으로 합니까"

=> 세번째 토픽은 ‘독과점으로 인한 고객이탈’ 이다.

해당 토픽에서는 앱 이용 불만, 할인 혜택 불만 등 다양한 사례로 고객 이탈하겠다는 고객들의 의견이 도출되었다.

그런데 고객들이 주장하는 가장 큰 이탈 사유는 배달의 민족의 ‘독과점’ 때문이라는 것이다.

‘배달의 민족’, ‘요기요’, ‘배달통’ 등 배달 어플리케이션 3사는 치열하게 다투고 있다. 고객들은 이러한 어느 한 기업의 힘이 강해졌다고 생각할 경우 이를 독과점으로 인한 횡포로 생각해 해당 기업에 반감을 가질 수 있고 이는 곧 고객 이탈을 야기할 수 있다는 것을 보여주고 있다.

# 토픽4 내용 살펴보기
reply_topic %>%
  filter(topic == 4) %>%
  pull(reply)
##  [1] "편리하고 좋은데 추가되었으면 기능이 하나 있습니다 리뷰 평가 기능이 있었으면 좋겠어요 현재는 도움돼요만 있지만 좋아요 싫어요 등으로 리뷰에 의견을 표시할 수 있었으면 좋겠네요 간혹 평점이 낮은 리뷰중에 말도안되는 요구해놓고 리뷰를 안좋게 써놓는 경우가 보이는데 사장님들도 속상할 것 같고 소비자 입장에서도 굉장히 불쾌하더라구요 싫어요가 많으면 해당 리뷰는 블라인드 처리하는 등의 기능도 추가됐으면 하는 바람입니다"                                                                                                                             
##  [2] "정말 잘쓰고있습니다 하루가 다르게 편의기능이 늘어나고 있어서 정말 유용하게 쓰고 있는데요 갑자기 건의하고 싶은 기능이 있어서 리뷰 남깁니다 배달에 보면 요청사항에 대해 쓰는 경우가 요즘 많은데 이 요청사항에 대해서 자주 쓰는 요청사항을 항목을 저장해두고 주문시에 원터치로 요청사항을 선택해서 주문할수 있는 그런 요청사항 목록칸을 만들어주셨으면 합니다 가게별로 이 요청사항이 따로 저장할수 있다면 더 좋을 것 같아요 수고하세요"                                                                                                                  
##  [3] "리뷰작성시 미리찍어놨던 사진을 업로드하지 못하고 미리찍은 사진만 갤러리에서 나타나지않음 어플에서 리뷰작성을 할때 새로 찍어야 합니다 도착예정시간보다 분이상 먼저 도착하는 경우도 있고 그러면 도착예상시간 전까지 리뷰를 바로 작성을 못하는데 리뷰작성을 위해 도착한 음식늘 앞에 두고 기다릴 수 도 없는 노릇이고 왜 이러는지 답답합니다"                                                                                                                                                                                                              
##  [4] "리뷰 사진 첨부하려고 하는데 갤러리에 들어가면 사진이 있는데 리뷰 들어가서 사진 선택하려고 하면 왜 사진이 보이지않고 선택도 안되는건지 갑자기 이상하네요 뭐가문제인거죠"                                                                                                                                                                                                                                                                                                                                                                               
##  [5] "오랫동안 유지하고 있는 유저입니다 어플 매우 잘 쓰고 있는데요 몇 년간 바뀌지 않은 몇가지가 너무 불편해 쓴 소리 한 번 하고 갈게요 요리로 검색 기능 왜 없는지 모르겠습니다 아래 답변 읽어봤는데 요리로 검색하는 유저의 수가 적다고 하셨더라고요 하지만 애초에 검색이 눈에 띄지 않고 검색 기능이 쓸만하게 제공되지 않아 그런 게 아닌가요 단지 광고 수익때문에 검색기능 전반을 불편하게 만든다는 건 이거 말곤 검색 관련 개선이 안 된 이유를 모르겠네요 너무 이상합니다 아니면 다른 이유가 있나요"                                                          
##  [6] "저번에 주문수 노출 불만건에 대해서 여러의견 반영해서 주문수 다시 안보이게 개선했기에 평점 안좋은 리뷰는 지웠어용 감사합니다 아 근데 한가지 더 개선해주셨으면 좋겠어요 검색기능 너무너무 유용한데 검색해서 나온곳도 배달 안되는곳들이 많네요 그냥 검색하게 보이게해서 나오갈래 주문하면 너무 멀다고 취소를 누르시네요 검색기능은 너무 좋은데 키로 이상인 곳들은 사실 배달이 힘들잖아요 하시는곳들도 있겠지만 표시만이라도 키로 이상이라는 표시 등 이런식으로 하시는게 어떠신지요"                                                                      
##  [7] "아 저만 사진 안올라갑니까 고객센터 전화했더니 지우고 다시깔아보래서 다시깔아봤지만 여전히 사진이 안올라가네요 사진 올리기해서 들어가면 아예사진 자체가 나오질 안네요 앨범에 사진이 개라고 나오는데 들어가면 사진 개도 안뜨고 사진 올려서 리뷰쓰고 싶어도 못써요 저번까지도 계속 사진 앨범 옮겨서 올렸는데 이제 옮겨도 사진 안뜨네요 정말 배민 너무 싫어요 진심 겁나 짜증나네"                                                                                                                                                                         
##  [8] "리뷰 이벤트 때문에 가짜 별다섯개 사진리뷰를 쓰지않으면 손해보는 구조 오늘 시킨 집은 최악의 맛이었습니다 하지만 사진리뷰한다고 요청사항에 적은 대가로 콜라 한병 받아먹어서 별다섯개 사진리뷰에 잘먹었다고 쓰게되네요 누군가는 제 리뷰를 보고 맛있는 집인줄 속아넘어가겠지요 그 누군가에게는 미안하지만 어쩌겠습니까 이미 콜라는 배달와서 다 마신걸요"                                                                                                                                                                                                  
##  [9] "맛집 동네 검색 있음 좋겠음 메뉴 종류 선택 장애 들을 위해서요 글이 잘못 전달 된거 같아 추가 작성합니다 우리동네 맛집 검색은 있는데 상호를 알아야만 검색할수 있습니다 상호 검색은 우리 동네에 무슨 맛집이 있는지 알때 하는거자나요 제말은 검색어 없이 위치 기반으로 주변에 등록된 맛집들을 보여주면 그중에서 선택 할 수 있는 기능을 얘기한겁니다"                                                                                                                                                                                                       
## [10] "어플 정말 잘 쓰고 있고 쿠폰도 있고 요청사항도 가게랑 배달 관련으로 개로 나뉘어서 정말 좋아요 그런데 딱 한가지 아쉬운 점은 위치를 설정 해놨음에도 배달 불가 지역이라고 뜨는 가게가 있는 거예요 그리고 하나 바라는게 있다면 한 가게에서 특정 메뉴의 리뷰를 검색 또는 조회 해서 볼 수 있으면 좋겠어요 그래도 이게 앱 사용이나 평가를 줄 정도는 아니라 진심으로 잘 쓰고 있습니다"                                                                                                                                                                         
## [11] "메뉴판에 베스트메뉴 외에 사진 안올린 가게들이 많던데 최소한 메인메뉴라도 사진찍었으면 합니다 어떤 재료가 들어가는 알고싶은데 예를들면 에그 샌드위치라고 해서 각 가게들이 다같은 재료만 쓰는게 아니잖아요 리뷰에 구매자들이 머샀는지 옵션메뉴가 자동 기재됐으면 좋겠어요 배민으로 많은 음식점들을 알게되서 좋아요"                                                                                                                                                                                                                                     
## [12] "낮은 별점순으로 리뷰 보게 해주시니 좋네요 그 전에는 최신순이라서 리뷰 이벤 댓글 밖에 안 보였는데 이젠 별 한개짜리 리뷰부터 볼 수 있어서 상한 음식 처보내는 쓰레기 음식점은 쉽게 거를 수 있게 되었네요 음식에 냄새난다는 리뷰 보이면 바로 패스"                                                                                                                                                                                                                                                                                                        
## [13] "리뷰 작성하려고 사진 선택하기 하면 앨범에 사진이 안떠요 폴더 미리보기 썸네일 안뜨는 사진이 많아요 왜 사진을 못읽는거죠"                                                                                                                                                                                                                                                                                                                                                                                                                               
## [14] "사진파일이 안뜹니다 분명 찍었고 클라우드 동기화도 다했고 별도 갤러리 지원안한다고 써있던데 여지껏 당연히 핸드폰에 자동 설치된 갤러리에서 늘 첨부해왔는데 왜이러죠 원래 갤러리에 장이 있었다치고 새로 장을 찍었으면 새로운게 보여야하는데 앨범 사진갯수만 올라가있고 사진은 보이지도않네요 리뷰쓰는데 강제로 글로만 쓰고있어요 빨리 해결해주세요"                                                                                                                                                                                                      
## [15] "전부다 좋은데 굳이 아쉬운점을 적어보자면 배달 주문후 맛있게 리뷰를 썼어요 이렇게 무한반복으로 돼지가 되어가는중에 어느날 내가 쓴 리뷰에다가 가게에서 답글달아줬다고 알림이 와서 클릭해서 들어가보면 리뷰관리 제일 윗쪽으로 가버리더라구요 최근 주문한곳도 아니고 한참 전인 주문에 뭐라고 리뷰를 썼는지 기억도 잘 나질않고 가게에서 뭐라고 답글달아줬는지 궁금해서 처음부터 천천히 밑으로 쭉 내리면서 그 가게를 찾아야하는게 아쉽더라구요 혹 닉네임 검색같은 기능으로 특정 가게의 내가 쓴 리뷰로 바로가기 기능이 있는데 제가 모르는건가 싶기 전체 리뷰"
## [16] "여러가지로 기능은 만족스럽습니다만 한 가게에서 중복으로 등록이 가능한건 왜그러신건가요 똑같은 가게가 여러개 중복적으로 뜨고 관리는 대충하다가 나중에 다른 등록된 가게로 바꾸는 느낌이 드네요"                                                                                                                                                                                                                                                                                                                                                         
## [17] "주문후 리뷰쓸때 주문한 음식이 자동으로 들어가면 좋겠어요 쇼핑몰처럼 리뷰보고 주문많이 하는데 이 사진이 어떤 음식의 어떤 사이즈인지 나오면 더 도움될듯"                                                                                                                                                                                                                                                                                                                                                                                                
## [18] "주문하기 창에서 개선했으면 좋을 것 같은 사항을 말씀드립니다 주문하는 음식점이 같을 때에만 같은 요청사항을 저장하고 음식점이 다른 경우 요청사항을 저장하지 않는 방식으로 바꾸는 게 좋을 것 같습니다"                                                                                                                                                                                                                                                                                                                                                   
## [19] "요기요만 쓰다가 깔아서 써보는데 식당은 더 많아서 좋은데 메뉴별 사진은 안떠서 아쉽네요 주문시 메뉴 사진으로도 결정 하기도 하거든요 메인 사진 뿐 아니라 메뉴 사진도 고려 해주세요 식당들은 많아서 선택의 폭은 조금 더 넓네요 의견 반영 한다고 개발 될지는 모르겠네요 개발팀에 전달 되지도 않을지도"                                                                                                                                                                                                                                                     
## [20] "혹시 가게 검색 또는 음식 종류로 검색은 안되나요 가게 내 메뉴만 검색이 가능한것 같은데 검색 기능이 부족한것 같아요"                                                                                                                                                                                                                                                                                                                                                                                                                                    
## [21] "정말 잘 쓰고 있는 앱입니다 단지 아쉬운 점이라면 메뉴 선택후 결제창 이전 화면에서 메뉴별로 세부 추가사항을 수정할 수 있는 기능이 추가 되었으면 합니다 즉 예를 들어 베스킨라빈스에서 파인트 가지 맛 을 로 시킨 뒤 결제하기를 누르기 이전 화면에서 파인트를 누르면 로 수정할 수 있었으면 좋겠습니다 다시 메뉴를 삭제하고 세부사항을 누른 것이 번거롭게 느껴집니다 꼭 반영되었으면 좋겠습니다 감사합니다"                                                                                                                                                 
## [22] "카드결제할때 엘포인트사용시 패스앱으로 자동넘어가기좀 없애주세요 엘포인트사이트에서 인증하려는덕 패스앱자꾸넘어가서 안썼어요 패스앱쓰는거 싫어해서 문자로만 인증하는데 왜 자동으로 넘어가게 만든거죠 요청사항 저장하지않았는데 저장되어서 자꾸 썻다지웠다하기도 불편 주문도중 다른 앱잠시 접속하면 장바구니 비워지고 주문창도 초기화되는거 너무 불편 배달원들이 큰소리로 문때리면서 배달왔다고 소리치는거 너무 불쾌해서 요청사항에 노크하고 문앞에두고가래도 안해서 요청사항왜있는지 알수없음"                                                        
## [23] "건의사항 있습니다 리뷰작성시 리뷰작성일 뿐만 아니라 실제주문일 주문한 메뉴도 볼수있게 해주세요 리뷰보고 맛있어보이는거 똑같이 시키고싶어도 뭔지몰라서 못시키겠어요 도움돼요 버튼 말도 의견에 대한 반대한다는 버튼도 만들어주세요 좋아요와 싫어요 버튼처럼 상대방 리뷰에 가게사장님들뿐만 아니라 일반고객들도 간단한 의견을 답댓글로 남길수있는 기능개선 부탁드립니다 감사합니다"                                                                                                                                                                      
## [24] "항상 잘쓰고있습니다 근데 요청사항이 정말정말간절한게있습니다 리뷰는 무슨음식에대한 리뷰인지 요기요처럼 리뷰 쓴 사람이 어떤 음식을 먹었는지 알 수 있게해주시면 안되나요 무슨 음식에 어떤 리뷰인지 모르니까 똑같은걸 시켜먹고싶어도 뭔지 몰라서 못시키고 같은 사이즈인줄알고시켰는대 알고보니 리뷰에나와있는거랑 사이즈차이가 엄청났다던가 그런경우가있는거같아서요 같은음식점이라면 리뷰가보이는 요기요로 손이가네요 다른음식점이라면 배민을택하긴하겠지만 아무튼 이게 고쳐진다면 더 많은 사용자가 쓰지않을까싶어요"                                   
## [25] "배달앱 등답게 정말 많은 매장과 보기편한 분류등으로 자주애용하고있습니다 근데 사용하다보니 가지 기능이 추가되었으면 하는데 어렵지 않을까 생각되는데 가게 매장 이름 검색도 좋지만 메뉴이름으로 검색도 가능하면 좋을 거 같습니다 며칠전 어떤 음식이 떠올라 먹고싶었는데 메뉴이름은 생각나는데 매장이름이 생각나지 않아 찾다 포기한 경험이 있거든요"                                                                                                                                                                                                      
## [26] "리뷰 작성 여러번 했더니 대량으로 리뷰 작성 의심 된다며 더이상 리뷰 작성 할 수 없다고 오류창이 나옵니다 계정 탈퇴 후 재가입 해도 리뷰 작성이 안됩니다 음식 주문시 리뷰 이벤트 진행하는 매장들이 많은데 먹튀 유도 하는 배민"                                                                                                                                                                                                                                                                                                                            
## [27] "왜 자꾸 리뷰남기라고 알림창띄움 겜하는데 맨위에 처 올라와서 개빡치네 그래서 리뷰남기러옴 쓰래기어플 배달왓을때나 알림띄우면대지 맛잇으면 알아서 리뷰함 리뷰 강요하지말고 추가로 난 분명히 안드로이드 알림 설정들어가서 배민앱 알림 꺼놧는데도 알림 뜨는데 수정해라"                                                                                                                                                                                                                                                                                   
## [28] "가게명으로 검색은 가능하던데 너무 뜬금없는곳에 있는것 같아요 분식이나 다른 탭을 눌렀을때 사에드쪽에 아이콘 같은걸로 표시가 되었음 합니다 그리고 가게명이 아닌 메뉴명으로도 검색이 되었음 좋겠어요 뭐가 먹고싶은데 어느곳에서 판매해는지 감이 안잡힐때 하나 하나 들어가서 확인하기 번거로운것 같아요"                                                                                                                                                                                                                                                  
## [29] "어플 넘 좋은데 리뷰가 아쉬워요 리뷰보고 사고싶은데 어떤 메뉴를 시켰는지 알수가없어요 리뷰를 쓸 때 자동으로 연동 되었으면 좋겠습니다 어떤 메뉴 샀는지 연동되게 해주세요 메뉴도 많고 메뉴 사이즈도 다르니 참고 하기가 어렵습니다"                                                                                                                                                                                                                                                                                                                       
## [30] "건의사항 검색기능을 위에위치시켜주세요 검색버튼이 있는지도 몰랐네요 그리고 치킨 카테고리 들어가서 검색하고 싶은데 카테고리 내에 들어가면 검색버튼이 안보여요 앱장바구니에 음식추가하고 잠깐 카톡이나 다른거 하고 오면 장바구니에 음식이 사라져있어요 시간 정도는 장바구니 유지시켜줬으면 해요 장바구니에 한음식점말고 여러개 저장할 수 있으면 좋겠어요"                                                                                                                                                                                               
## [31] "원래 멀리까지도 표시가 됫었는데 갑자기 바뀐뒤로 근처 가게만 표시되네요 가게들이 그래서 몆개밖에 안떠요 설정할때 가까운순 멀리까지보기 키로내까지 보기 이렇게해서 멀리있는 가게도 설정하면 다 떴었는데 그게 기능에서 없어졌어요 배달도 다 가능했던가게들이었구요 근데 이제 코앞가게만목록에 뜨네요 너무불편합니다 멀리있는 가게들도 표시되게 이전처럼 수정해주세요"                                                                                                                                                                                    
## [32] "즐겨찾기나 주문내역에 메모기능이 있었으면 좋겠어요 성공한 주문이 있으면 실패한 주문도 있고 가게마다 장단점이 있는데 하나하나 기억하질 못하니 실패한 메뉴를 다시 주문한다거나 할때가 있네요 이 가게는 어떤 메뉴가 맛있고 어떤 메뉴는 별로더라 이 가게는 일회용용기가 아니라서 좋더라 이 가게는 피클이 수제라 괜찮더라 같은 것들을 나만 볼수있도록 메모할수 있었으면 좋겠네요"                                                                                                                                                                          
## [33] "배달되는 음식점은 매번 정해져 있었는데 이 앱을 이용하니 다양한 메뉴가 배달되어 좋네요 결재도 간편하고 이용 평점이 있으니 선택에도 큰 도움이 됩니다 다만 배달음식이라 어쩔수 없이 일회용 플라스틱 용기를 많이 쓰게 되어 참 안타까웠습니다 한끼 편하게 먹자고 환경오염의 주범이 되어버린 것 같아 양심이 콕콕 아팠습니다"                                                                                                                                                                                                                                
## [34] "개선 사항 하나 건의드려요 리뷰에 주문한 메뉴 정보가 공개될 수 있도록 한다면 편할 것 같습니다 그냥 맛있다고만 하는 리뷰가 많은데 어떤 메뉴인지 모르니까 특별히 도움이 안돼요 한번 고려해주세요"                                                                                                                                                                                                                                                                                                                                                        
## [35] "설치한지는 좀 되었는데 이제야 리뷰 남기네요 한번 적응하니 편리하구 좋아요 잘쓰고 있습니다 앱 키면서 항상드는 생각이 메뉴 선정인데요 단순하게 메뉴 나열보다는 한쪽 공간에 몇개 질문을받아서 메뉴종류를 추천해주는 란이 있어도 재밌을꺼같아요"                                                                                                                                                                                                                                                                                                          
## [36] "이걸로 먹고사는 많은 사람들이 있는데 리뷰 하나에 기뻐하고 하루종일 신경쓰이고 다툼이 생기고 지금 제가쓰고있는 이 배민 어플 리뷰만 봐도 말도안되는 비평이 난무하지않던가요 물론 다른 이용자의 불만사항을 참고할수있지만 구태여 별점낮은순으로 볼수있는 기능을 넣은건 업주와 이용자 모두에게 마이너스인것 같습니다 차라리 그저 최신순으로 볼수있게만 하면 되지 않을까요 현재로선 며칠전 몇달 전의 안좋은 리뷰를 계속 달고사는거나 마찬가지입니다 개선된 사항에 대해서도 꼬리표처럼 쉽게 보여질수있다는점이 상당히 아쉽습니다 바뀐것 전체 리뷰"          
## [37] "검색기능 일부러 안넣은 것 같아요 검색이 안되니까 가맹점들이 상위에 자사를 노출시키려고 돈을 더 낼게 뻔히 보입니다 솔직히 배달어플 거기서 거기 다 비슷한 느낌인데 가맹점 다른 이유로 여러개 쓰는 경우가 많은데 소비자가 불편한건 당연하고 왜 그랬는지까지 뻔히 보이네요"                                                                                                                                                                                                                                                                               
## [38] "리뷰 쓸 때 사진 첨부 누르면 앨범 사진이 다 보이지 않아요 휴대폰도 껐다 켜보고 사진을 카톡에 올렸다가 재저장 해봐도 안뜨네요 밑에 다른 분도 저와 같은 이유로 문의하셨던데 답변대로 해봤지만 해결되지 않습니다 사진 리뷰 쓰고싶은데 쓸 수가 없어요"                                                                                                                                                                                                                                                                                                     
## [39] "몇 년째 잘 쓰고 있는데요 한가지 건의 드리자면 업체 차단 기능이 있었으면 좋겠네요 맛이나 서비스적으로 최악인 곳은 다시 주문하고 싶지 않은데 시간이 오래 지나고 까먹어서 다시 시키고 다시 실망하고 돈은 돈대로 날리고 다시 기분만 불쾌해지는 경우가 많아요 업체엔 피해나 전달 안 가게 소비자 개인 주문 목록에서만 없애고 소비자가 그 차단 목록을 확인하고 케어할 수 있는 기능 좀 만들어주세요"                                                                                                                                                          
## [40] "어플 정말 잘 쓰고 있고 쿠폰도 있고 요청사항도 가게랑 배달 관련으로 개로 나뉘어서 정말 좋아요 그런데 딱 한가지 아쉬운 점은 위치를 설정 해놨음에도 배달 불가 지역이라고 뜨는 가게가 있는 거예요 그리고 하나 바라는게 있다면 한 가게에서 특정 메뉴의 리뷰를 검색 또는 조회 해서 볼 수 있으면 좋겠어요 그래도 이게 앱 사용이나 평가를 줄 정도는 아니라 진심으로 잘 쓰고 있습니다"                                                                                                                                                                         
## [41] "다 좋은데 리뷰중에 맛있어 보이는 메뉴가 뭔지 모르겠어서 아쉽습니다 나도 저 조합으로 먹고싶은뎅 리뷰에도 무슨 메뉴를 시켰던건지 나와있으면 좋을 것 같아요"                                                                                                                                                                                                                                                                                                                                                                                             
## [42] "요청사항저장되서 불편해요 답변감사합니다 그런데 그걸누가 모르나요 왜 굳이 불편하게 쓴걸 다시 지우게끔 만드셨는지요 많은사람들이 전에업장에 남길걸 다른업장에 모르고 보내서 서로 당황하는 경우가 빈번한데 그런건 잘 모르시죠"                                                                                                                                                                                                                                                                                                                          
## [43] "아니 이것저것 다 떠나서 업장들 리뷰 별점 작업 안막으십니까 아니면 쿠팡잇츠같이 아예 공지를 못하게 만들어놓던지 이건 뭐 너나 할거없이 서비스 리뷰 강요에 별점 개라니 그리고 오픈리스트 이거 누구 머리에서 나온거임 상단에 띄우려고 그비싼 돈주는데 너나 할거없이 무제한 그럼 돈 쓴사람하고 안사람하고 뒤로 밀리는건 같은데 돈을 왜씀 왜 다같이 돈쓰라는 얘기로 밖에안들림 그리고 양심적으로 수수료 인하좀 합시다"                                                                                                                                      
## [44] "어플에 리뷰 기능 말고 개인적으로 가게마다 메모를 남길수 있었으면 좋겠습니다 후기를 남기고 싶진 않고 개인적인 의견을 나만 볼 수 있게 남겨서 가게들을 헷갈리지 않게 저장해놓고 싶어요"                                                                                                                                                                                                                                                                                                                                                                  
## [45] "추가 페이코결제 에러때문에 게시글 남기고 나서 개선하여 다시 별 개 수정합니다 별한개 부족한것은 고객리뷰 보면서 답답한것은 그 리뷰 주문을 한 메뉴가 뭐인지 자동으로 올리도록 해줄수없나요 리뷰 보고 시킬려니 해당 매뉴가 뭐인지 알수 없어서 짜증나기도 합니다"                                                                                                                                                                                                                                                                                         
## [46] "가게검색하는 창을 상단에 표시해야하는거아닌가요 아래쪽에 있어서 검색창있는지도 몰랏네요 상단에 표시해주세요 내가 먹고싶은가게 상호 바로 검색할수있게요"                                                                                                                                                                                                                                                                                                                                                                                               
## [47] "가게 리뷰에 주문한 메뉴 좀 나오게 해주세요 맛있어보이는 리뷰가 있어도 메뉴가 먼지 몰라서 다른거 시키게 되네요 아니면 메뉴에 실제 사진 나오게 해주세요"                                                                                                                                                                                                                                                                                                                                                                                                
## [48] "원래 잘 쓰고 있는데 아쉬운점이 있어서 리뷰남깁니다 요즘 리뷰이벤트로 별점이라던지 좋은리뷰를 강요하는 곳이 많아지는거 같네요 이러면 네이 블로그 마냥 바뀌는거 아쉽습니다 요즘 리뷰이벤트 하는곳 믿고 거릅니다 그리고 각 업체별로 많이 주문된 메뉴를 볼 수 있는 기능은 없나요 그 기능있으면 여기 배 통 같은 어플 제칠거 같은데 말이죠 맨날 리뷰보고 메뉴다시 넘어가서 보고 너무 불편해요 개선 부탁드립니다"                                                                                                                                            
## [49] "언젠가부터 리뷰쓸때 사진 첨부하는 부분이 업데이트된 것 같은데 왜 사진이 최신순으로 정렬이 안되는거죠 그리고 모든사진 누르면 폴더별로 정리 됐었는데 또 안되네요 왜 됐다 안됐다하는건지 차라리 갤러리 열어서 선택하게 하던지 했으면 좋겠어요"                                                                                                                                                                                                                                                                                                           
## [50] "다 좋은데 불특정한 상황이 발생해 불가피하게 현금결제 외엔 결제를 할 수 없다는 게 너무 불편하네요 죄다 앱 내에서 간편결제 아님 계좌와 같은 비슷한 사항들 뿐이라 결제주문을 못하니 굉장히 불편하네요"

네번째 토픽은 ‘고객 리뷰’이다.

해당 토픽내 각 리뷰에서 ‘리뷰’, ’음식’, ’사진’, ’가게’ 등의 단어가 추출되었으며 ’리뷰’라는 각 리뷰에 상당수가 들어있는 것으로 확인되었다.

어플내 리뷰 작성 과정에서 발생한 불편 혹은 신뢰성 없는 리뷰로 인한 불만이 주 내용이다.

구매자는 리뷰를 작성함으로서 공급자에게 의견을 전달하며, 또한 다른 구매자의 리뷰를 읽음으로써 구매 의사결정에 필요한 정보를 획득한다.

온라인 쇼핑몰을 대상으로 수행한 연구에서는 온라인 리뷰를 통해 제품에 대한 태도와 경험을 공유 (리뷰 작성의 형태로 나타남) 하여 구매 의도와 재방문 의도에 영향력이 미친다는 것을 확인할 수 있다.

# 토픽5 내용 살펴보기
reply_topic %>%
  filter(topic == 5) %>%
  pull(reply)
##  [1] "소비자는 배달비용을 지불하는데 가게에서 뭐같은 룰인지 모르겟지만 최소주문금액을 책정 최소주문금액 설정해두고 무료배달이면 이해라도한다지만 최소주문금액 만원넘는집이 절반이상 넘으면서 배달비받는집은 도데체 무슨생각인지 인분 주문가능매장 분류해둬서 인분도 주문이 가능하다는 기기적인답변은 하지마세요 대부분 이용고객들은 배달비에 최소주문금액 꾸역꾸역 채워가면서 이용하고있다는게 팩트니까 고객센터 고객불만족 응대 부분 예전에 서비스가 불만족스러워서 고객센터에 전화하니 가게에 패널티부여는커녕 그냥 환불받으시라고하는 전체 리뷰"                
##  [2] "처리 미흡 너무느림 환불처리하는데 시간이지나도록 되지않았고 다시전화를 걸었는데도 처리가되어있지않고 팀장 이랑 전화를했음에도 말로는 죄송합니다 하지만 모든게 처리가안됨 저녁을 먹을려고 배갈을 시켰지만 시간동안 아무것도 먹지못하고 기다린 끝에 팀장은 쿠폰지급 과 긴급환불 요청을 하겠다하였지만 일이 지나도록 쿠폰지급과 환불 금액은 들어오지않고 처리뿐만 아니라 모든게 다 느림 답답해죽는줄알았고 상담사가 하는말이 다른분이랑통화를 하셔도 똑같은 말일이다 라고하는데 해결책을 내줘야 네 알겠습니다 하고 전화를 끊는데 말하는것마다 네 죄송 전체 리뷰"
##  [3] "진짜 장난하는것도 아니고 고객센터 연결이 왜 안됩니까 주문하고서 배달시간이 분 걸린다고 하길래 너무 늦어서 주문 취소할라고 하니 어플 통해서 취소 못하고 가게에서도 자체적으로 취소가 안돼게끔 했으면 고객센터라도 연결이 잘되겠금 해야 되는거 아닌가요 차라리 소비자들 편하게 주문 취소 할 수 있게 하던가 소비자가 어플 통해서도 주문 취소를 할 수 있게 해줘야지 이건뭐 소비자 우롱하는것도 아니고 결국 취소도 못하고 늦게 먹게 생겼어요 애꿎은 가게에다가도 화나게 만들고 오늘이후로 절대 안씁니다"                                                          
##  [4] "이전부터 어플 오류로 계속 문의했는데 확인이 안된다 전산팀에 확인해보겠다 하고 개월째 확인을 안해주네요 그로인해 오배송된건 제 탓이라고만 하고요 확인이 안된건지 확인을 안하는건지 할 생각은 있는건지 모르겠고 거기다가 쿠폰장난질 하는것도 역겨워서 요기요로 갈아탑니다 전산팀에 로그 확인 하는게 개월씩이나 걸릴일인지 도 모르겠네요 그냥 확인이 안된다 죄송하다 시인하는게 그렇게 어려운일인거죠 멀쩡하게 문의하던 사람들도 니네 고객센터 케어팀인가 민원팀이 연락주겠다는 약속 안지키고 강성고객 만든다음 진상취급하고 모르 전체 리뷰"                    
##  [5] "총주문금액 문의 넣으면 알려준다고해서 문의 넣었는데 순차답변한다는 두리뭉술한 말로 답변 완료시켜버리네요 황당 문의하면 알려주신다매요 일처리 일부러 이렇게 하나 총주문금액 물어볼 정도면 어느정도 사용한 고객인데 고객대응 참"                                                                                                                                                                                                                                                                                                                               
##  [6] "매장에서 픽업이 완료된지 한시간이 되도록 도착하지 않았고 전화하니 아무 말없이 취소됨 주문시간이 아닌 픽업시간 오래 써온 배달앱이지만 이제 못써먹을 지경이 되었나보네요 기다린 시간에 대해 사과와 설명 한마디 없는 무책임한 모습에 나자신도 더 이상 이용할 마음도 없어졌고 그거로는 분이 안풀려서 적극적으로 주변사람들에게도 이용하지 않게 다른 대안들을 홍보하겠습니다"                                                                                                                                                                                     
##  [7] "음 이용은 잘하고 있어요 그런데 최소주문 금액은 이해하는데 어느 순간부터 왜 배달비를 추가로 받는걸까요 언제부턴가 배달비 따로받는데다가 최소주문 금액 도 비싸졌네요 예전엔 최소 주문금액 맞추면 배달은 무료 아니었나요 이거 혼자사는 사람들이나 혼자먹는 사람들은 원치 않게 인분씩 시키고 배달비용도 고객이 결제해야되는 상황이 되어버렸으니 이 어플 초반에 쓸때는 좋았는데 한끼 식사가 점점 비싸지니"                                                                                                                                                        
##  [8] "연락도 없이 일방적으로 주문취소가게는 좀 뺏으면 하네요 맨날 시켜놓고 시간 시간 기다리다가 나중에 일방취소된걸 알면 화가 많이납니다 그런 가게는 왜 올라오는건지"                                                                                                                                                                                                                                                                                                                                                                                              
##  [9] "한시간 안에 배달 온다더니 한시간 반 지나도 감감무소식이길래 전화했더니 알아본다고 하곤 다시 전화와선 하는 소리가 바쁜시간대라 주문이 누락되서 죄송하다 취소해드릴까요 사람 시간 다 뺏고 식사시간 다 놓치게 해놓고는 미안하다고 한마디 하면 땡이냐 내가 확인 안했으면 두시간 기다릴때까지도 가만히 있었겠네 직접 결제 말고 배달원 오면 카드결제는 리뷰도 못쓰게 막아놓음 장난하나 진짜 업소관리 좀 똑바로 하던가 아니면 바쁜 시간대엔 배달을 받지를 말아요 뭐하는 짓이에요 이래놓고 진상취급하면 참 할말 없습니다"                                            
## [10] "주문취소하는게 불편합니다 시스템적으로 문제가있다고 생각합니다 앱에 취소 버튼이 있으면좋겠습니다 고객센터에 전화해도 도통 전화를 받지 않네요"                                                                                                                                                                                                                                                                                                                                                                                                                
## [11] "처음 주문해보고 바로 삭제 분 걸린다는 주문보고 명분 커피 주문완료후 분 기다렸으나 배달이 되지 않아 가게에 전화 사장왈 주문이 폭주하여 주문을 잡지못하였다고 함 커피마시려고 명 기다린 시간과 비용은 어떻게 할거임 가게에 패널티는 없는거임 취소만해주면 그만이여 뭐여"                                                                                                                                                                                                                                                                                       
## [12] "총 주문금액 확인이 부터 된다면서요 근데 왜 아직도 최신버전이 이죠 총주문금액 확인한 이용자들에게서 현타 오지게 오는 현상이 발생하니까 아직 확인 못한 사람들은 막아보자라는 생각으로 업데이트 막아놓은건가요 아님 다른이유가 있나요 지금 많은 사람들이 업데이트도 안되고 총주문금액 확인 안 된다고 합니다 또 공지사항에 금일 일 날짜로 공지하기를 일까지만 확인 가능하고 월 일부터는 앱에서 확인할 수 없다면서요 지금 일 시간도 안 남았는데 업데이트 못해서 확인 못한 사람은 앱에서 확인할 방 전체 리뷰"                                                      
## [13] "다 좋은데 딱 하나가 아쉽다 주문을 실수를 했을때 바로 취소가 안된다는거 취소할려면 고객센터 전화 연결해야하고 그러는 시간에 요리 벌써 시작되서 취소가 안된다 본인의 실수이기 때문에 누군가를 욕할수도 없다 혼자서 열받아가며 먹기 싫은거 돈 주고 먹어야한다 이 점만 개선 되면 좋겠다 필자는 막국수 시키려다 실수로 비빔시켜서 집에서 분거리 밀면집 두고 비빔멸면 배달팁 원이나 주고 먹는다"                                                                                                                                                                   
## [14] "전체 메뉴검색좀 만들어 주세요 매장말고 메뉴 일일이 들어가서 찾기 힘들어요 왜 이런 기본적인게 없지 신기할따름 중복매장도 많아 더 힘들어요 주문취소도 예상시간 너무 길게잡혀 바로 취소하려해도 매장에서 전화안받음 백날천날 기다리거나 배민으로 연락하는거 너무 불편해요 타어플은 초 시간이라도 주는데 타어플보다 등록업체가 많아 사용하네요"                                                                                                                                                                                                                  
## [15] "자꾸 배달주문이 누락됩니다 전에도 배달 시간이 넘었는데 안와서 전화해보니까 누락 됬다고 했었는데 오늘 또 주문한지 한 시간 넘어서 전화해보니까 누락됬답니다 배민 믿고 사용했는데 실망감이 큽니다"                                                                                                                                                                                                                                                                                                                                                              
## [16] "가끔 주문한가게 직원실수로 누락되서 시간이되도 배달안온적이 있어요 가게들이 설정한 배달예상시간에 도달하면 한번더 확인할수있게 알림같은게 전달되서 누락여부를 알수있게 했으면 좋겠네요"                                                                                                                                                                                                                                                                                                                                                                      
## [17] "미안하단 말 한마디도 없이 시간 넘게 기다리다가 전화 했더니 오류로 아직 주문조차 안들어갔다고 하네요 환불이 문제가 아니라 기본 예의가 없네 기분나빠서 배민 앱 못쓰겠네요"                                                                                                                                                                                                                                                                                                                                                                                     
## [18] "앱은 참 좋고 써보니 고맙기도 합니다 예전엔 가게 열었는지 전화도 해봐야했는데 오픈 시간 전엔 주문도 안되고 다 연동되게 되어있나보더군요 세상 많이 좋아졌다는 생각이 절로 듭니다 단지 아쉬운 대처가 있어 별점을 이번 버젼에만 낮게 드립니다 첫 주문 회원 상대로 하는 이벤트 쿠폰 안내도 제대로 안되어 있고 첫 주문 첫 사용자가 알아봐야 얼마나 잘 알겠나요 못쓰고 그냥 주문하거나 넘어갈 수도 있는데 그럼 그 다음 이어지는 두 개의 쿠폰을 보여주질 말던가 약올리는 것도 아니고 쿠폰함에 들어가 있는 것 같은 회색 버튼은 또 전체 리뷰"                          
## [19] "정말 속 보이네요 사람들이 총 구매내역 확인하고 지출금에 놀라서 경각심 갖고 덜 시켜먹을까봐 할로윈 기간까지만 서비스 제공한다고요 총 구매금액확인이랑 할로윈이랑 뭔 연관이 있다고"                                                                                                                                                                                                                                                                                                                                                                            
## [20] "쓰세요 아니 가게가 열었다 해서 시켰더니 시간이 지나도 안오길래 이 배달집은 왜이리 늦어 했더니 주문취소 가게사정 아니 나한테 무슨 연락하나없이 주문취소야 그래서 다른곳에서 다른음식 다른메뉴로 시켰더니 또이러네 그래서 혹시 몰라 주문하고 그집으로 가게전화했더니 닫혀있네 배민관계자 양반들 지금 장난하나 그러면 지금 가게잘못이 아닌 배민 앱자체의 문제 아니신가 또 중간에 다 안읽으니 이건 안보겠지"                                                                                                                                                     
## [21] "아니 매장에 직접전화하면 콜라주고 앱으로주문하면안주고 왜그러냐고하니 답변도없고 콜라먹고싶음 매장으로직접전화하라하고 배민은그냥 식당 메뉴보기용인데 그럴바에 검색을하는게낫겠다"                                                                                                                                                                                                                                                                                                                                                                           
## [22] "별하나도 아까움 결제가 안되서 물어보니 매장은 어플에게 물어보라고 하고 고객센터는 매장에 전화하라고하고 고객센터 담당자는 전화번호 모르니 알아서하라는 식으로 화를 내더라구요 업체가 어디가 들어와 있는지 모른다는것도 이해하기 어렵네요"                                                                                                                                                                                                                                                                                                                    
## [23] "총 주문금액 조회 누가 개발했나요 아니 할로윈이벤트치곤 참 삐딱하네요장난하십니까 따로 추후공지도없으시고 그냥 아이폰만대처하고 안드로이드폰은 그냥 문자 혹은 전화로만들으라고요 현 버전이 인데 되면 한다고하는데 안되는분들이 많으시네요 개발하시는분은 그냥 똥싸고튀어버리셨네요 다이렉트로 따로 전화통화하고싶은데 상담사분들은 직통이안된다고 발뺌하시고 기간연장을 더 하시던가 아님 이런걸 애초에 만들지 마시던가 대책이없네요 아주 가관입니다 별도 진짜아깝네요 기간이 오늘까지이니까 오늘안에 답변하세요 개발팀분들만 답변 전체 리뷰"                  
## [24] "한두번도 아니고 누락시키는거에 대한 개선방안 좀 세우세요 누락 여러번 당했을때마다 느끼는거지만 여긴 직원들간의 매뉴얼도 제대로 없는거같고 직원서비스교육도 제대로 안이루어지는거같습니다 오늘도 지금 시간 분 기다리다 전화했더니 또 누락됬다네요 지금으로부터 분 더 기다리라는데 참나 그쪽에서 실수를 했으면 손님한테 다음번 할인혜택이라던지 뭘 주던가요 말싸움하기싫어서 그냥 더 기다리겠다고 했는데 매번 미안하다고만 하고 식사시간 두시간을 기다리게 하는 이런 상황은 좀 안만들었으면 합니다 시에 주문했는데 기다리다가 전체 리뷰"                       
## [25] "잘배달되던곳이 갑자기 않된다고나오고 그래서 전화로 가계확인했더니 장사하고있는데 연락도안왔다고하고 원레 제가 어디서 불평불만 안하는사람입니다 머리카락나와도 그냥저작먹을만하면 왠만하면 점줍니다 헌데 오늘일로 한번더 실망해서 글남깁니다 평소에 다른사람리뷰를잘안보는데 직접가서먹었던 식당중 별로였던곳이 떠있어서 평점이좋길레 리뷰쓴분들 눌러서확인해보니 가짜리뷰들이 많네요 지역이 부산 서울 전남 충북 등등으로 전국각지에서 달만에 리뷰가 개가있음 물론 일있어서 지역에다닐수있는 사람일수도있지만 전체 리뷰"                                      
## [26] "아주편리하고 많이사용들하시니 정말좋습니다 다만 한가지 건의하자면 리뷰를 쓸때 어차피 바로결제한사람들만 작성이 가능하니 어떤음식을 시켰는지 주문내역이 닉네임밑에 적혀있으면좋겠습니다 고객분들께서 사진은 많이들올리시지만 맛있다고하는데 정작 그음식메뉴이름을 모를때가 있습니다 주문내역이 리뷰에 함께표시된다면 정말좋을거같습니다"                                                                                                                                                                                                                      
## [27] "저기요 총주문금액 일대일문의로 남겨놨는데 빠른시일내에 답변해준다면서 왜 안해주나요 그래놓고 답변완료 처리해두시고 몇일째 확인안해주는겁니까 할로윈이벤트로 총주문금액 알려주는 이벤트가 어디있습니까 논란되니까 이벤트라고 하시는거에요"                                                                                                                                                                                                                                                                                                                    
## [28] "업데이트를 했는데도 총주문금액을 볼 수가 없어요 아예 문의나 이벤트 이런창들이 모두 사라져서 포인트 주문내역 리뷰내역 이런것들 개만 보여져서 따로 고객센터에 문의도 못하고 있어서 평가란에라도 남겨봅니다 금액보는것도 오늘까지라서 못볼거 같은데 조치좀 취해주시면 감사하겠습니다"                                                                                                                                                                                                                                                                           
## [29] "다 좋아요 근데 만나서결제는 왜 리뷰쓰기가 안돼죠 하 진짜 계속 약 시간뒤에 작성하라고 뜨더니 결국 바로결제만 리뷰쓸수있다네요 진짜 다 좋은데요 집에 애기가있어서 시킬때마다 출발하실때 전화달라고 요구사항에쓰면 전화는 안오고 다들 벨을 누르세요 전화주시면 나가서 결제할텐데요 이게 한두번이 아니에요 만나서결제도 리뷰쓸수있게해주세요 참다참다 이번에도 안지켜주셔서 앱 건의사항해봅니다"                                                                                                                                                                 
## [30] "주문을 잘못눌러서 주문 취소를 했는데 주문취소가 느리게 되네요"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
## [31] "안드는 왜 업뎃도안되고 총주문금액 확인도 안되고 고객센터문의같이 번거롭게확인해야하나요 안드로이드는 왜 한번도 폰으로 조회 못하게하죠"                                                                                                                                                                                                                                                                                                                                                                                                                       
## [32] "분 걸린다길래 주문취소 하려고 주문내역에 들어가면 계속 최신 정보를 불러오지 못했다고만 로딩반복 로딩 이미지는 깨져서 나오고 안정적인 네트워크 상황 하에서 새로고침을 눌러도 무한로딩이고 심지어 지금 진행중인 주문내역 정보조차 정확하지 않음 코로나 때문에 서버가 불안정한건지 뭔지는 모르겠으나 결국엔 취소 못하고 꼼짝없이 기다려 먹게됐네요"                                                                                                                                                                                                             
## [33] "진짜 정말 화가 너무 나다못해 분통이 터집니다주문이 취소됬으면 됬다 연락을 줘야하는 거 아닙니까 한시가넘게 기다렸는데 안와서 고객센터 전화해보니 그제서야 취소됬다는건 뭐 사람가지고 장난하는건가요 그에관한 보상도하나없고 몇일기다리면 환불된다 그러면 끝인가요 이런식으로 대충 고객응대하는데 쓰고싶겠습니까 좀 똑바로들좀하세요 제발 덕분에 밥도굶고 입맛도 다 잡쳐서 밥 굶습니다"                                                                                                                                                                        
## [34] "다이어터분들에게 이 앱 대박추천 치킨을 시켜도 오지않아요 당신의 몸무게와 통장을 지켜준답니다 시간이 넘는 기다림끝에 지쳐 결제취소를 요청하면 가게에 권한이 있어서 자기네들은 취소도 못해준다네 결취소 카톡이 와서 봤더니 고객의 요청으로 결제 취소했다고 카톡하나 띡 오고 끝임 짜증나서 전화했더니 우린 결제취소 해줬는데 또 뭐가 문제야 이런 느낌임 다이어트 성공하고 싶은 분들 배달의 민족 꼭꼭 설치하세요"                                                                                                                                                
## [35] "개같은 경험 개같은 어플 배달 사고 배달 누락 주문 취소 책임은 뒷전 배달앱의 한계 기분 그지 같다 주문 취소 업체 리뷰도 막고 니들끼리 상생이지 고객은 음식값만 비싸지고 기분나쁘고 편리"                                                                                                                                                                                                                                                                                                                                                                        
## [36] "좋아서 자주 쓰고있긴한데 이런상황은 처음임 치킨시키고 치킨이 왔는데 갑자기 재료소진으로 주문이 취소됬다면서 포인트 안싸이고 가게리뷰도 못 쓰고 주문한적 없다고 나옴 왜 갑자기 주문취소 카톡오면서 치킨은 주고 돈은 받아가고 포인트는 안싸임 원래 배민이 이랬나요"                                                                                                                                                                                                                                                                                            
## [37] "배민라이더 완전 엉망 분 늦어도 됨 근데 시간있다가 옴 그것도 연달아 앱오류라고 하는데 이틀연속으로"                                                                                                                                                                                                                                                                                                                                                                                                                                                           
## [38] "하루이틀사용한것도아니고 몇년째 이상인데 요새 뭔짓을 하는건지 모르겠는데 한번켤때마다 한번씩 오류가나고 오류 대 문의하려고하면 앱이멈춰버려서 오류신고도못함 심지어 캡쳐없이 그냥설명으로 겨우문의했더니 매크로같이 삭제했다다시깔아라 와이파이끄고해봐라 이런답변만 받음 시키는대로 다해봐도 안되고 이렇게오류난지 지금 주가 넘었는데 그사이 업데이트도 두번이나 있었는데 전혀개선이 안됨 여기 답글에 또 매크로같은거 달리면 이제 배민안쓸거임"                                                                                                             
## [39] "다 좋은데요 고객센터 이메일상담 업무애들 복붙좀 그만하라고 하세요 문의 내용은 읽지도않고 대충 관련 답변 아무거나 복붙쳐해서 보내고 빡치는줄 번이나 문의함"                                                                                                                                                                                                                                                                                                                                                                                                   
## [40] "잘 사용은 하고 있지만 가끔 주문 다 받아 놓고 몆십분 있다가 가게 사정으로 취소 됐다라고 하면 어쩌라는건지요 아에 주문을 안 받게 해야 하는게 아닙니까 한 참 골라 겨우 주문 하고 그런 취소 문자 기분 별루 입니다 배달 안 할꺼면 에초에 주문 받지 못 하게 시스템을 수정 해 주시든지 살짝 열받아 리뷰납깁니다"                                                                                                                                                                                                                                                    
## [41] "전 도 여러번 했던 사람입니다 두명이 동시에 한개의 아이디로 각자 핸드폰에 로그인해서 사용했었는데 어느순간부터 막아놨더라고요 로그인할때마다 핸드폰 인증해야만 들어갈 수 있게 이걸 문의하니 이주동안 없는 사람 취급하며 문의 못본척 답변도 안해주더라고요 그리고 배달의민족은 항상 느껴왔던게 자주쓰는사람보다 새로운 사람 끌어들이는데 더 신경을 쓴다는겁니다 포인트도 갑자기 월부터 없애버려서 고객센터에 문의하니 좀 더 직접적이고 더 나은 서비스로 제공할 예정입니다 하는데 그럼 그런 서비스를 만든 후에 포인트를 없애든지 이제 전체 리뷰"                
## [42] "너무너무너무 짜증나서 난생처음 리뷰씁니다 원래요기요쓰다가 한번 배민써보고 뭔가별로라 안쓰고 최근에 요기요가 은근 없는 업체가많아서 배민에만 있길래 그거하나주문하려고깔았습니다 코로나사태때문인지 모르겠는데 주문내역이고 뭐고 주문시간보려고하는데 하나도 안보이고요 이시국이라 전화연결도 안되더라구요 뭐 답이없길래 직접가게에 전화했고요 다신 배민안쓸것같네요"                                                                                                                                                                                        
## [43] "이제는 앱 주문보다 직접 전화로 주문하겠습니다 앱에는 딱히 불만은 없습니다 다만 언론에 나온 문제점과 주문하는 가게에서도 부담이 된다고하니 무기한 사용 중단하겠습니다 그 동안 잘 사용했습니다"                                                                                                                                                                                                                                                                                                                                                                
## [44] "와 깜짝놀랐네요 주문 많은 순으로 정렬해주는 기능은 왜 없앤거죠 수수료 논란에도 저는 솔직히 그러려니했는데 이제 그냥 검색용도로만 써야겠네요 를 고의적으로 해치면서까지 개편시킨 의도가 느껴져서 다시는 앱에서 주문하지 않으려합니다 정말 괘씸하네요 배신감도 느껴집니다"                                                                                                                                                                                                                                                                                     
## [45] "내가 쓴 리뷰가 허위리뷰라며 숨김처리되어있음 어플 거지같네 고객센터 전화하니깐 구매한 영수증을 보내라는데 이체한내역 주문한내역은 있어도 어느누가 영수증을 보관하고있습니까 통화한 상담원은 보관하는가요 이용안하렵니다"                                                                                                                                                                                                                                                                                                                                     
## [46] "정말 빡치네요 그전 까지는 정말 좋았는데 이번에 주문하고 마음이 바뀌었습니다 제가 치킨을 시켰는데 시간이 되서도 안오는거에요 그래서 치킨집에 연락해보니 주문이 안들왔다는 겁니다 뭐 제가 주문을 잘 못했다고 생각할 수도 있는데 카톡으로 분 이내에 도착한다는 메시지까지 왔단 말이에요 관리자님 잘못 처리하신겁니까 앞으로는 사용 안할거 같아요 그래서 별점 점 드립니다"                                                                                                                                                                                       
## [47] "이벤트할 때마다 서버다운 된다는데 언제 고쳐지나요 결제하고도 접수 완료 카톡이 안와서 문의를 하려고 해도 문의도 안되고 전화도 연결량이 많아 연결이 안된다는 말만 시간정도 들은 것 같습니다 결제는 이미 됐는데 음식 주문내역은 안뜬다니 돈 먹은 건가요 소통이라도 되게 문의는 좀 원활하게 되야하는 것 아닌가요"                                                                                                                                                                                                                                                
## [48] "앱 리뷰 제대로 읽어보지도 않고 최근 이슈화 된 문제에 대한 답변만 복사해서 붙이기하고 있네 이벤트로 사용자 끌어모아 돈 벌기에만 눈이 멀었으니 고객 서비스가 제대로 될 리가 있나 사용기한 남은 쿠폰도 자기들 맘대로 회수해가는 최악의 고객 서비스를 경험해보고 싶은 사람들에게 추천할 만한 앱이다"                                                                                                                                                                                                                                                             
## [49] "뭐 다른 후기들 보니까 아쉽게도 총 주문금액을 볼 수 없다고만 나오고 일까지 이벤트인데 일 업데이트 되었다고 하시면 다 끝난줄 아시나요 안드로이드랑 아이폰이랑 차별하시는 것도 아니고 사람 기만하시는 건가요 똑같은 답변 복붙하시지 마시고 업데이트 안 되어서 총 주문금액 못 본 사람들은 볼 수 있게 이벤트 연장을 해주시던가 하세요 마케팅팀들아 지난번 연예인 차별 사건도 그렇고 요기요랑 고객을 대하는 태도가 하늘과 땅 차이네요 분발좀 해주시길 제발"                                                                                                        
## [50] "총주문금액 어딧죠 안드로이드 지원안한다 쓰던가 무슨 문의답변도 다 똑같은글로 싸질러놨네"

=> 다섯번째 토픽은 ‘음식점 서비스’이다.

해당 토픽 내 리뷰에서 ‘주문’, ‘전화’, ‘시간’, ‘취소’, ‘서비스’ 등의 단어가 주로 들어간다.

또한 배달 지연, 배달 주문시간 오설정, 주문 취소 불가 관련 등의 불만이 주 내용인데 이러한 불편사항은 ‘배달의 민족’ 자체의 문제 (ex. APP 관련) 라기 보다는 음식점 서비스 과련 불만으로 분류해야 할 것이다.

’배달의 민족’은 플랫폼 서비스로, 서비스상에서 소비자인 일반 이용자와 공급자인 음식점(업체)의 거래가 이루어지는 곳이다.

따라서 앞에서 언급한 내용들은 매장에서 결정, 진행, 적용하는 사항들이다.

해당 토픽을 통해 외식배달 플랫폼 서비스 공급자 (음식점) 에 대한 신뢰는 플랫폼 서비스 자체 대한 만족도에 긍정적인 영향을 미친다는 것이 확인된다.

따라서, 플랫폼 서비스를 제공하는 배달의 민족 사업자뿐만 아니라 공급자인 음식점(업체)가 제공하는 가격, 품질, 서비스가 플랫폼 서비스 고객 만족도에 영향을 미칠 수 있음을 보여준다.

’배달의 민족’은 음식점의 서비스를 배재할 수 없기에 서비스 모니터링을 통해 고객과 공급자인 음식점 업주 간의 거래를 원활하게 하기 위한 노력을 기울일 필요가 있는 것이다.

# 토픽6 내용 살펴보기
reply_topic %>%
  filter(topic == 6) %>%
  pull(reply)
##  [1] "배민페이 업데이트 해놓고는 기존에 사용하던 비장의 카드 블랙 카드는 등록도 안되네요 이게 무슨 배민페이인가요 카드사에서 안 되는거면 그쪽이랑 합의 다 보신 다음에 업데이트 하셔야지 왜 기존 배민페이 잘 쓰던 고객을 기만하십니까 일주일에 세번 네번씩 시켜서 먹는데 이렇게 불편할꺼면 카드 자르고 요기요 갈랍니다"                                                                                                                                                                                                                                   
##  [2] "배민페이를 항상 사용했는데 며칠 전부터 배민페이를 사용 할려면 최신버전으로 업데이트를 해야 된다고 뜨던데 버전도 최신 버전으로 업데이트 되어 있는데 왜 그렇게 뜨는지 결제하는데 불편해졌어요"                                                                                                                                                                                                                                                                                                                                                       
##  [3] "배민페이로 시켜먹으려고 봤더니 배민페이가 막혀서 업데이트하라길래 업데이트 했더니 이제는 사용하던 카드가 배민페이에서 사라져있네요 카드사 개밖에 지원 안하는건가요 기존에는 우리카드 이용해서 잘만 시켜먹고 있었는데 추후에라도 다른카드 지원하긴하나요 자주 쓰는 카드를 지원 안하면 배민 쓸 필요가 없네요"                                                                                                                                                                                                                                        
##  [4] "일까지 이벤트라고 하셨는데 일에 업데이트 완료했음에도 이벤트 버전이 적용되지 않는 것은 기종에 따른 업데이트가 차이가 있을 수 있다고 한 부분이 안드로이드 부터 해당인가요 갤럭시 안드로이드 인데 적용이 안 되어서 여쭤봅니다"                                                                                                                                                                                                                                                                                                                       
##  [5] "배달의민족 계속 사용하다가 폰을 바꿔서 새로설치했는데 계정이 없어졌네요 아이디찾기 해도 없고 결국은 새로 가입했습니다 그리고 우리카드 배달의민족 카드로 발급받아서 사용해왔는데 배민페이는 우리 등록도 안되네요 어떻게된건지"                                                                                                                                                                                                                                                                                                                      
##  [6] "업데이트 안되시는분들위해올려요 안드로이드경우 최신소프트웨어 업데이트가 된후에 업데이트가 가능합니다 와이파이키시고 설정 일반 소프트웨어 업데이트진행하시면 이상없이 진행가능할거에요"                                                                                                                                                                                                                                                                                                                                                            
##  [7] "하다가 폰던졌습니다 카드주문하려고 앱 개나 깔았는데도 결제 안 됌 등록하기 인가 그 버튼이 안 눌러져요 분동안 결제하려고 다른폰으로도 해보고 카드도 바꿨는데 빡쳐서 현금결제합니다 쿠폰 받으면 뭐해 쓰질 못하는데 분동안 뻘짓했다 처음 결제시 원할인해준다길래 분동안 고군분투했는데 결국 쿠폰도 못쓰고 날리네 빡쳐서 이번만 시키고 배민 삭제할거임 배민 다신 안써 아 다시생각해도 빡친다 배고파 죽겠네"                                                                                                                                             
##  [8] "아니 안정화 목적으로 업데이트를 천천히 해줄거면 기간을 넉넉히주던가 꼴랑 일 잡아놓고 업데이트도 안되게하면서 총금액 어그로는 어그로대로 끌고 딱봐도 다보여주면 매출타격입을까봐 아이폰만 되게해놓고 어그로끌어서 이슈화 시키려고 한거같은데 썩 좋아보이진않네요 제주변사람들도 다 안드로이드쓰는데 되는사람 한명도 없었고 아이폰유저들만 차별대우하는건가 싶기도하고 안하느니만 못한 이벤트였네요 이벤트로 공개한다해놓고 안되는사람은 대 문의를 하라니 책임감도 없어보이고 궁금해서 문의한지 일이 지나가는데도 처리중 어휴 요기요나 쓸랍니다"     
##  [9] "배민페이에 언제쯤 되서야 배달의민족 카드 카드 를 등록할 수 있을까요 배민에서 발급을 장려하는 카드를 등록할 수 없을 때 서비스를 시작한것이 이해하기 어렵습니다"                                                                                                                                                                                                                                                                                                                                                                                     
## [10] "현재 배민페이 사용하려고 하는데 최신버전임에도 최신버전에만 배민페이 사용가능하다고 합니다 삭제후 재설치하는데 돠려나 모르겟네"                                                                                                                                                                                                                                                                                                                                                                                                                    
## [11] "업뎃하니 정상적으로 돌아오긴 했네요 근데 구글플레이 내 앱에서 보면 업데이트가 없고 배민 검색해서 제작사 조회해서 넘어가야 업데이트 버전이 보이더라구요 덕분에 업뎃이 있는지조차 뒤늦게 알았네요 그 외에는 다 좋습니당"                                                                                                                                                                                                                                                                                                                             
## [12] "비장의카드 없어져서 앱 업뎃 안 된건지 한참 왓다갓다 거렸어요 등록 가능한 카드사가 곳으로 되어있는데 배민카드는 카드면 공지를 띄우셔야지 왜 그대로 두시는거에요"                                                                                                                                                                                                                                                                                                                                                                                    
## [13] "우리 비장의 카드는 등록도 안되게 하는게 결제 개편인가 뭐가 편해졌다는겁니까 기존 카드들은 등록해서 비밀번호만 누르면 걸제 되는 시스템 새로운 시스템도 카드등록 비밀번호 입력이후 결제되는 시스템 단 등록 할 수 있는 카드가 줄었다 이게 후퇴된 시스템이지 무슨 개선 사항이야"                                                                                                                                                                                                                                                                       
## [14] "초심진짜 심각하게 잃으셨네요 예전같으면 그냥 천원쿠폰 뿌리셨는데 터치는 그지같이 안되고 케릭끼리 겹치는데 어쩌다 운좋게 목표점수겨우넘으면 천원쿠폰주고 오늘보니깐 목표점수 점에서 점으로 늘었네요 걍 이벤트하지않는게 좋을거같습니다 주기싫으면 이벤트를 하지마시든가요"                                                                                                                                                                                                                                                                          
## [15] "진짜 이럴거면 그냥 이벤트 하지 마세요 장난칩니까 미니게임이 터치는 제대로 먹히지도 않는데 점수는 말도 안되게 높고 점수넘어서 쿠폰 까보니 천원인데 무슨 만족감이 생기겠습니까 그냥 박탈감만 드네요 이럴꺼면 그냥 원 쿠폰 주세요 개같은 생고생 시키지 말고 진짜 쓰다보니 개빡치네 게임이라도 제대로 만들어라 진짜"                                                                                                                                                                                                                                   
## [16] "그냥 이벤트 안 해도 잘 나가는데 괜히 쓸데없는 선착순 이벤트 해서 이미지 망치고 있음 그냥 할인 이벤트를 하지마세요 제발 이벤트 기획한 사람은 다른 부서로 옮기는게 좋을듯 요기요에서 우리는 선착순 아니라고 비꼬는 광고 때리는거 보면 깨닫는거 없나"                                                                                                                                                                                                                                                                                                 
## [17] "왜 카카오뱅크 카드로 결제가 안 되나요 창 열고 카드 등록을 번이나 해도 등록된 카드 없다고 연결됩니다 앱 따로 열어보면 카드 정상적으로 등록되있다고 나옵니다"                                                                                                                                                                                                                                                                                                                                                                                        
## [18] "다 좋은데 왜 만나서 카드 현금 결제는 할인쿠폰 사용이 불가능하나요 할인쿠폰 적용이 안되는 특별한 이유라도 있나요"                                                                                                                                                                                                                                                                                                                                                                                                                                   
## [19] "열심히 구매했으니 할인 미끼로 광고해서 시간투자하며 할인신청으로 관련 카드 도만들었으나 할인 미적용 빡쳐서 전화햇으나 통화중 어플고객센터에 긴급전화 항의등 그전에 불만도 함께개시함 첫구매할인고객 천원할인된다해서 구매햇음 적용안됨 알고보니 첫구메햇더니있어서 안된다함 나도 오래전이라 기억가물 그러나화나는건 첨부터 구매이력있어 할인불가라고 알림창떳으면 굳이 무리하게 쿠폰시효안에 구매하려하지않았을것임 어그로 미끼처럼 쿠폰발급되고 마치 사용될것처럼 안내창나옴 그래서 낚임 항의글 남겻이라 일이자나도록 무시 너무하도군요 전체 리뷰"
## [20] "월 일부터 일 회 배민페이로 만원 이상 결제하면 다음날에 천원 쿠폰 주는 이벤트 참여했는데 어제 결제 이후 시간 지났는데 아직도 쿠폰 지급이 안됐습니다 자세한건 왜 안 적어 놓는 건가요 주말에는 쿠폰 지급도 쉬는건가요 아니면 일 회에서 일이 시간인건가요 이틀 연속 어제 주문한 게 일로부터 단 분 차이인데요 왜 이런거 자세히 안적어놓고 전산상 문제되게 하시나요 장사 안하시나요 코로나 로 고객센터 직원 축소했으면 이런 이벤트도 보류하거나 신중하게 하셨어야죠 참 답답스럽네요"                                                                     
## [21] "같은 이벤트 계속하네 그냥 천원 이벤트나 할것이지 게임 이벤트는 뭐냐 약올려서 기분 나쁘게 만드는 전략이냐 저거 기획한 사람 짤라라 진짜 마케팅 지식 의심스럽네"                                                                                                                                                                                                                                                                                                                                                                                      
## [22] "직접 결제도 할인 쿠폰 적용 되었으면 좋겠어요 브이아이피 되어서 쿠폰 쓰고 싶어도 페이코도 안 된다 하고 카드도 없으니 늘 오천원 쿠폰을 그냥 날리는 셈이 되네요"                                                                                                                                                                                                                                                                                                                                                                                      
## [23] "카드 사용 외에는 포인트 적립이 불가한 점 이용횟수 대비 쿠폰 적립 등 할인정책이 부실한 것 같네요 등록된 점포 수가 많다는 점 하나로 사용했는데 이젠 점포수도 부실해질테니 더 사용할 이유가 없습니다"                                                                                                                                                                                                                                                                                                                                                 
## [24] "친구추천 첫주문 할인쿠폰 사용할려고 했는대 실수로 결제할때 쿠폰을 못누르고 결제했다 다시주문취소하고 다시 결제하려하니간 첫주문 결제가 아니라고 할인 안된단다 배달민족 다시는 사용 안할거다"                                                                                                                                                                                                                                                                                                                                                       
## [25] "앱리뷰는 진짜 생전 안 남기는데 너무 기가막혀서 남깁니다 초창기 때는 배민 혜택도 많고 포인트 적립도 잘되서 좋았었는데 어느 순간부터 포인트 적립률 낮추더니 날이갈수록 요즘말로 개악이 된다 그러나요 기업은 잘나가면서 소비자 혜택은 엄청나게 줄여나가네요 포인트 적립률 낮추고 쿠폰도 원 원 소액 쿠폰으로 그것도 겨우 두 장 주면서 기간 제한까지 걸어놓더니 유명인들한테는 만원짜리 쿠폰을 바가지로 퍼주셨네요 실제로 많이 사용하는 수많은 이용자들한테는 그렇게 짠돌이처럼 굴면서 유명인들한테는 그렇게 혜자처럼전체 리뷰"                         
## [26] "더하기쿠폰팩 구입하면 바로 적용되게 해주세요 왜 번거롭게 쿠폰 등록 개를 하나하나 해야하는지 이해를 못하겠음 한 번에 개 등록이면 이해를 하겠는데 이건 무슨 똥개훈련임"                                                                                                                                                                                                                                                                                                                                                                              
## [27] "아니 총주문금액 조회 이벤트는 안드로이드 이용자 일부러 맥이려고 한거임 업데이트를 무슨 이벤트 끝나고 하냐 요기요 슈퍼클럽가입하러간다"                                                                                                                                                                                                                                                                                                                                                                                                             
## [28] "처음 쓰는데 쿠폰얘기 하나도 안하다가 이벤트창 들어가니 첫 사용쿠폰이 있다고 하고 전 이제 사용도 못하네요 감사합니다 요기요로 넘어갈 기회를 주네요"                                                                                                                                                                                                                                                                                                                                                                                                 
## [29] "배민이 일회용품 수저 젓가락 안받는 캠페인 하는 것을 정말 칭찬합니다 그리고 사업자들에게도 친환경 용기를 사용하게 한다고 알고 있습니다 다만 배달의민족 같은 플랫폼이 뜨면서 플라스틱 사용량이 너무 많아졌어요 음식국물 등이 묻은 플라스틱은 재활용도 안되고 폐기처분되는데 참 속상하네요 사업자들에게 친환경용기 사용을 더 할 수 있게 사업자분들을 더 지원해주세요 응원합니다"                                                                                                                                                                      
## [30] "처음사용자용 쿠폰 등록햇는데 사용못한다고 나오네요 예전에 제번호로 주문기록이 잇어서 그런듯 그럼 다른휴대폰에서 사용하게 삭제해야되지 않나요 다른처음사용자에게 선물로 준다든지 쿠폰등록은 되엇는데 삭제도 안되고 다른사람주는 기능도 없고 어쩌라는건지 이래서 배민은 썩음"                                                                                                                                                                                                                                                                        
## [31] "배민 페이 사용이 갑자기 안돼요 어플 최신 버전으로 업데이트 하라는데 업데이트 나온 것도 없고 어제부터 급 사용이 안되네요 그저께도 이상 없이 사용했는데 어플 지웠다 깔아도 동일해요 확인 좀 해주세요"                                                                                                                                                                                                                                                                                                                                                
## [32] "배달되는 곳도 많고 쿠폰도 있어서 좋은데 만나서 결제 시에도 쿠폰을 적용할 수 있도록 해주셨으면 합니다 배민에서 자주 시켜 먹는데 사정상 만나서 결제로 해야 하는 경우가 많아서 쿠폰을 쓰지 못하네요 같은 서비스를 제공받는데 만나서 결제 시에는 쿠폰을 적용할 수 없는 이유를 전혀 모르겠습니다"                                                                                                                                                                                                                                                       
## [33] "유명인들 쿠폰 논란때도 그러려니하고 말았는데 이건 뭐 주기싫음 아예 이벤트 진행을 하지말든가 요번 이벤트 최 악"                                                                                                                                                                                                                                                                                                                                                                                                                                     
## [34] "배민앱 최신버전인데 잘쓰다가 오늘 결재할려니 배민페이 결재가 안됩니다 확인해보니 최신 배민앱에서 결재가 가능하다던데 무슨 말입니까 방구입니까 업데이트도 안뜨는데"                                                                                                                                                                                                                                                                                                                                                                                 
## [35] "이벤트 상세 페이지들 중 하나는 항상 안나와요 예를 들어 현재 진행되고 있는 떡볶이 마스터 이벤트 안드로이드 갤럭시 그랜드 맥스"                                                                                                                                                                                                                                                                                                                                                                                                                      
## [36] "이벤트 욕먹으니까 터치잘되게하고 점수도 내렸네요 상당히 역겹다 그래봤자 쿠폰은 단돈천원 복붙 매크로 답글 얼른 달아주세요"                                                                                                                                                                                                                                                                                                                                                                                                                          
## [37] "항상 잘 쓰고 있고 감사합니다 다만 배민 카드가 우리 카드인데 우리 카드가 배민페이 안 된다는게 엄청 이상한대요 원래는 되었던 걸로 아는데 우리 카드는 언제부터 가능한가요"                                                                                                                                                                                                                                                                                                                                                                            
## [38] "아니 왜 배민페이 안 됩니까 최신 배민 앱을 사용하라는데 지금 쓰고 있는게 최신 버전인데요"                                                                                                                                                                                                                                                                                                                                                                                                                                                           
## [39] "아니 다 좋은데 매일 할인쿠폰 주는 개 브랜드 이벤트 쿠폰 받는거 왜 그 받은 쿠폰 가게로 바로 들어갈수 있는 포탈 버튼같은 건 없어요 일일히 찾기 너무 힘들어요"                                                                                                                                                                                                                                                                                                                                                                                        
## [40] "우리 민족이 아니었음 온통 힘들어서 고생하는 마당에 야비하게 속내를 드러내고 영세사업자와 소상공인 등에 빨대꼽고 피를 뽑으려하고있다 결국 이건 소비자 등에도 빨대꼽겠다는 것이고 더더욱 문제인건 독과점 구조를 만들어 돈을 뽑아내겠다는 악의마저 느껴진다 결국 돌아오는것은 배신감이며 여전히 치졸하게 조삼모사로 상인들과 소비자를 우롱하는 모습이 매우 가소롭다"                                                                                                                                                                                  
## [41] "이용이 간편해서 대부분 배민만 사용했었는데 얼마 전 업데이트 후부터는 일정시간대에 앱 주문이 안되고 전화주문만 되는군요 업체에게 좋은 기능인지 뭔지는 모르겠지만 소비자입장으로서는 불편하기만하고 딱히 배민을 쓸 이유가 없어졌습니다 어차피 전화로 주문할꺼면 찌라시도 충분하고 쿠폰도 넘쳐나니까요 하루 빨리 수정이 되었으면 좋겠네요"                                                                                                                                                                                                            
## [42] "월 일 최종업데이트 이후 안드로이드 버전이 결제가 안되고 있습니다 들어가지기는 하지만 결제가 안되네요 이 후 배달통이나 요기요에서만 음식을 주문하고 먹고 있습니다 다른배달앱은 되는데 배민만 안되는건 좀 그렇지 않나요 저 혼자만의 생각도 아니고 번은 지웠다가 다시 깔았고 고객센터에선 안드로이드 하위버전은 안될수도 있다고 말하기만 하는데 좀 수정 좀 해주시죠 아무리 이벤때문이라지만 다른앱은 다 되는데 배민만 안되는건 좀 아니잔아요 아 저같은 고객필요없으시면 수정 안해주셔도 되구요 빠른답변 부탁해요"                                     
## [43] "배민페이에 우리카드등록하려는데 우리은행 클릭하는게안뜨네요 화나네 계속안뜨니까"                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
## [44] "연결상태가 불안정합니다 다음에 다시 접속해주세요 안내 계속뜨고 전화로만 주문가능하게 유도하는것 같음 쿠폰사용 못하게 몇달전부터 전화로만 주문했음 회원가입하고 카드도 등록하고 쿠폰도 등록했는데 욕나옴"                                                                                                                                                                                                                                                                                                                                           
## [45] "장난하나 주문누적금액 본다하면서 광고로 어글만 냅다 끌어놓고 정작 업데이트는 이제 겨우 진행하면서 해당 기능은 빼놨네 그래놓고 대 문의해야 보여준다고 개불편하게 해놓다니 할로윈 이벤트는 뭐 누구랑 한겁니까 전에도 첫배달 이벤트 같이 특정인을 위한 이벤트하다가 사과문까지 내놓고 이번에도 똑같은 짓을 하는겁니까 진짜 이벤트 기획자 업뎃 관리자 일 따로 합니까 일인 개발도 이따위로는 안할겁니다 이럴거면 하질 말던가 왜 이따위로해서 사람들 기분 더럽게합니까 맨 윗단계 하나만더 올라가면되는데 더러워서 안쓰고만다"                            
## [46] "사용중입니다 그리고 시각장애인 사용자입니다 주문지면에 약간 문제가 있습니다 음성지원 안내 사용을 합니다 음식 메뉴를 고르고 장바구니에 담은후 장바구니에서 주문을 진행하면 다음과 같은 문제가 발생합니다 배민에서 쿠폰을 지원해주기에 쿠폰을 받았습니다 주문지면에서 쿠폰을 선택하고 적용을해야하는데 쿠폰 선택이 되었는지 안 되었는지 선택 해제 를 읽어 주지를 못합니다 제 자 동의 같은 경우에도 마찬가지로 선택되었는지 안 되었는지 읽어주지 못하여 몇번 클릭했었습니다 용 문제입니다 앱스토어에 글을 적어야하겠지만"                             
## [47] "더러운정책과 더러운 포인트 제도 옛날 초기때부터 사용해오던 유저인데 도저희 배민은 오랫동안 사용해도 이득되는게 하나도없는 배달의민족만의 이득장사를위한 어플인걸 확실히 느끼고 내휴대폰에서 이어플을지웁니다"                                                                                                                                                                                                                                                                                                                                      
## [48] "삼성페이 지원 못한다는 그 흔한 메시지나 알림 경고문구 한줄 없이 주문 받아놓고 카드가 없는 소비자 탓하며 불이익 주는 기업 요즘같은 시대에 삼성페이 지원 못하는거에 한번 기술이 없어서 지원 못할수도 있는데 그걸 소비자에게 책임전가하는 행태에 또 한번 기가 차 삭제함 참고로 아직도 삼페를 지원 못하는 결제기를 들고 배달 온 사람은 그냥 외부 배달업체가 아니라 배민 유니폼을 입은 배민 직원임 배달부 왈 요즘은 다 카드 직접 꽂는걸로 해요"                                                                                                         
## [49] "아니 무슨 카드 등록해라놓고 내카드는 안된데 내카드는 머니냐 왜 체크카드가 안됨"                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
## [50] "배민마트 첫주문 쿠폰 사용하려그러는데 쿠폰함에 없다고 뜨고 한번 떠서 쓸려고 하면 결제창 넘어갈때 튕겨요 도저히 쓸수가 없음 몇번을 지웠다 다시 깔고 했어요 사람 화나게 만드네요"                                                                                                                                                                                                                                                                                                                                                                    
## [51] "비장의 카드 등록안되게해놓고 쿠폰뿌리면 어쩌란거에요 뭐가편해졋다는거죠 예전보다더불편해진거잖아요"

=> 여섯번째 토픽은 ‘이벤트 기간 내 발생한 특정 기기의 어플리케이션 오류’이다.

해당 토픽에 대해 상세하게 표현한 이유는 어플리케이션 이용 중 발생하는 오류라는 점에서 토픽 7과 유사한 측면이 있기 때문이다. 따라서 토픽 7과 구분하기 위해 상세하게 기재하였다.

해당 토픽은 시계열 분석한 결과 특정일에 집중적으로 등록된 리뷰라는 것이 확인된다.

확인 결과 실제 이벤트 기간에 안드로이드 (특정 기기) 기기에서만 최종 배달 금액이 뜨지 않는 등 이벤트 주문 접수가 불가한 문제가 발생한 것으로 파악된다.

추가로 이벤트은 일정 기간동안 진행되었지만 해당 토픽의 리뷰들은 상당 수가 이벤트 종료 당일과 종료 바로 다음 날에 기입되었다.

만약 해당 문제가 이벤트 기간 초반에 발생하였을 때와 현재 토픽의 리뷰들처럼 이벤트 종료 직전에 발생했을 때를 비교해서 작성 수 (주문량은 동일하다 가정) 나 감정을 분석한다면 고객 분석 (마케팅이나 CS) 의 측면에서 도움이 될 수도 있으리라 판단된다.

따라서 이 날 발생한 유사한 현상에 대해 많은 고객들이 다른 언어적 표현을 사용하면서 리뷰를 남겼다. 하지만 토픽 모델링 결과 해당 고객들 대부분이 토픽 5 에 들어간 것으로 확인된다.

# 토픽7 내용 살펴보기 
reply_topic %>%
  filter(topic == 7) %>%
  pull(reply)
##  [1] "네이버 로그인을 하려고 이메일과 비밀번호를 제대로 기입해도 계속 로그인이 되지 않고 비밀번호를 찾으려 네이버 이메일과 전화번호 오타 없이 입력해도 계속 없는 아이디라고 뜹니다 그래서 새로 가입하려고 하면 네이버 로그인 있다고 가입 못하게 하고요 그러면서 정작 만나서 결제는 로그인해야 쓸 수 있고요 성질나서 바로 요기요 깔았습니다"                                                                                                                                                                                                                        
##  [2] "갑자기 로그아웃 되더니 비밀번호 변경 실패 메세지가 계속 뜨네요 휴대폰 번호로 인증 받아서 진행해보고 메일주소로도 인증번호 받아봤는데 안돼요 비밀번호도 자 이상 영문기호숫자 입력했는데 뭐가 문제인걸까요 로그아웃 되기 전에 친구초대코드로 친구가 가입해서 그런가요 이제 제 아이디는 접속 안되는거에요 친구 가입하자마자 이런 오류 떠서 좀 그렇네요"                                                                                                                                                                                                         
##  [3] "휴대폰인증을 해서 인증번호까지 했는데 주문후 본인인증 본인인증에서 오류인지 인증안되고 이런거 처음봤네 가입할때는 인증인된 번호가 본인인증에서 안된다고"                                                                                                                                                                                                                                                                                                                                                                                                     
##  [4] "주문하는 과정에서 회원가입을 했는데 주문 완료 후 주문내역에 들어가니 내역은 안 뜨고 오류창만 무한로딩 마이페이지에 들어가보니 회원가입하면서 한 로그인 정보가 반영되어 있지 않았음 재로그인하는데 인증번호를 또 받아서 주문 한 건 하고 인증번호 세 개 받음 첫주문 이벤트가 있다는 걸 늦게 알고 문의 남겼는데 문의 내역 확인하려니 또 오류 메시지 뜸 어떻게 처음 가입하고 분 사이에 이렇게 많은 오류를 경험할 수 있는지 신기하기만 합니다"                                                                                                                    
##  [5] "할인 자주 하는건 좋은데 아이디랑 비밀번호 찾는게 혈압오르게 하네요 비밀번호찾기에서 아이디랑 핸드폰 번호를쳤더니 자꾸 빨간글씨로 아이디와 전화번호를 확인해주세요 라고 뜹니다 그래서 아이디를 잘못입력해서 가입했나하고 아이디 찾기를했더니 앞두글자 빼고 나머지는 별표표시 되어있습니다 그래서 아이디가 틀린건지 맞는건지 확인을 못하네요 하필 아이디를 앞두글자를 잊어먹었네 아이디 찾기를 해야겠구나 아이디찾기를 했는데 앞두글자만 알려주고 나머지는 별표표시로 알지 못하게 했네 정말 보안이 철저하구나 그럼 나머지 뒷글자를 잊어먹 전체 리뷰"           
##  [6] "배민정책상 어플가입시 정확한 본인확인을 하지 않기 때문에 누군가가 내 폰에서 휴대폰 결제를 해준다면 동일아이디로 인식이 되어 둘의 계정묶임 내폰 내 아이디로 주문하고 지인이 휴대폰결제를 해주면 지인계정과 내 계정이 묶임 먹심삼일 이벤트 까지 매일 한번씩 총 번 주문하면 만원쿠폰혜택 남편과 저 각자 이벤트에 참여하여 남편은 혜택을 받았는데 저는 쿠폰버튼만 뜨고 아무리 눌러도 발급이 안되길래 고객센터 문의했더니 남편계정과 제 계정이 묶여있다는 겁니다 엄연히 남편계정 따로 제 계정 따로 있는 상태이며"                                                 
##  [7] "비밀번호를 까먹어서 비밀번호를 바꾸고 로그인시도했는데 로그인이 안되고 계정정보가 일치하지 않다고 계속 뜨네요 다시 바꾸고 로그인시도해도 로그인이 안되고 똑같이 뜨네요"                                                                                                                                                                                                                                                                                                                                                                                      
##  [8] "결제를 할 수 가 없네요 그 지코바좀 먹겠다는데 왜 다 되다가 결제할때 왜 버튼이 아무것도 안눌리는거죠 뭐가 문제일까요 핸드폰이 문제인가요 문제가 뭔지 도통모르겠네요 은행어플이 잘못된걸까요 제가 지금 몇번째 결제부분에서 버튼이 하나도 안눌려서 어플을 껐다 켰다하는지 모르겠어요 도대체 뭐가 문제일까요 저는 문과에요 문송합니다 이과에서 해결 좀 해주세요 부탁 입니다 너무 화가나서 할부가 끝나지도 않은 핸드폰을 집어던질뻔했어요 저 돈있어요 결제 좀 하게 도와주세요"                                                                                    
##  [9] "회원가입이 이미 완료되어 있는상태에서 비밀번호를 까먹어서 비밀번호 찾기로 비밀번호를 재설정했는데 그 비밀번호로 다시 로그인하려하니까 안되네요 회원정보수정이 제대로 이루어지지 않는것 같아요"                                                                                                                                                                                                                                                                                                                                                               
## [10] "전에는 안그러다가 어느순간부터 하나카드 공인인증서로 결제할때 하나카드 어플 설치후 공인인증서 로그인을 하라고 뜨네요 로그인을 해도 화면은 그대로이고 당연히 예전부터 하나카드 어플은 깔려있었구요 어플 문제인가 싶어 하나카드와 배민 어플까지 삭제했다가 재설치 해도 똑같은 현상이고 하나카드의 문제인가 싶어서 타사 배달 어플을 똑같은 결제 방식으로 사용해봤는데 결제가 됩니다 버그인지 뭔지 해결좀 해주세요"                                                                                                                                              
## [11] "배달의민족 네이버로그인 오류메시지 좀 길게 띄워줘요 네이버 로그인 계속 실패해서 오류 메시지 보고 싶은데 초만에 사라져요 고쳐줘요 읽으면 해결할 수있는 문젠데 그리고 이메일 요구는 왜 합니까 전화번호만 알면 됐지 답변받고 리뷰 또 답니다 이미 해결했었고 아니 오류메시지가 초만에 사라져서 읽을 수가 없습니다 오류 메시지 팝업 시간 늘려주실겁니까 그리고 이메일 요구 왜 합니까 꼭 답변부탁합니다"                                                                                                                                                           
## [12] "원래 댓글 잘 안남기는데 필요할 때마다 쓸수없게 만들어놔서 화나서 글올립니다 비밀번호 찾기로 임시번호를 받아서 입력하면 계정정보가 일치하지 않는다고 하면서 안들어가집니다 혹시라도 잘못입력했을까봐 다시입력해보고 띄어쓰기 확인이랑 복사 붙여넣기를 해봐도 다 안됩니다 좀 써보려고 할때마다 매번 이래서 결국 다른어플로 시켜먹습니다 회원가입을 새로하고싶거나 네이버로 로그인하려고해도 이메일정보를 불러올수 없다하고 어쩌란건지 모르겠습니다 그냥 차라리 비밀번호 잃어버렸으면 어플쓰지마세요라고 적어놓으세요 그럼 이런 수고는 좀 덜수 있겠네 전체 리뷰"
## [13] "배민앱 잘 쓰고 있어요 그런데 배달해주시는 분들이 영수증 떼는 기계를 들고 다니지도 않으면서 앱에서 영수증 발급 버튼이 정상 동작하지 않으면 어쩌자는건지 모르겠습니다 멀리 떨어진 가게에 직접 가서 받으라는 건가요 여태까지 만나서 결제를 해도 항상 영수증 발급이 잘 됐는데 딱 어제 결제한 내역이 안되길래 상담문의 했더니 상담원 분이 바로 결제할 때만 영수증 발급 된다고 하시고 시일이 지난 영수증이 출력 안 되는 건 이해하겠는데 도대체 영수증 발급은 어떻게 해야지 나오는 버튼인가요 당최 이래갖고 회사 야식 주문할 수 없을 것 전체 리뷰"                  
## [14] "갑자기 아이디는 사용안한지 오래됬는데 인증번호 하라고 뜨고 이건 뭐 다른사람이 제 아이디 가지고 로그인 하려했다는거고 오랜만에 들어갔더니 로그인은 뭐 아무것도 못하고 무한로딩 진짜 최악 그게 아니라 전 계정 로그인도 안하고 삭제 한지 오래됬었는데 갑자기 로그인하면 뜨는 인증번호 입력하라는 문자가 왔다는 거에요"                                                                                                                                                                                                                                          
## [15] "오랜만에 다시깔아서 비번 찾고 로그인 햇는데 계정이 일치하지 않는다고 해서 네이버로 로그인 하려햇더니 그것도 안되고 페북도 인식이 안된다고 하고 어떻게 쓰면되는지 따른건 둘째치고 배민 아디 비번 찾고 로그인 햇는데 안되는건 버그인지 일시적 오류인지 왜 지웟엇는지 기억나네요"                                                                                                                                                                                                                                                                               
## [16] "폰 초기화하고 다시 깔아서 쓰려는데 아이디가 전화번호로 인증돼서 메일이 뜨는데 비밀번호 찾기할 때 메일과 전화번호 적으래서 적으면 왜 자꾸 다시 확인해달라는 문구만 뜨는지요"                                                                                                                                                                                                                                                                                                                                                                                  
## [17] "로그인이 안돼요 휴대폰을 초기화했다가 다시 깔아서 네이버 로그인하려는데 아이디 비밀번호 틀린건아니구요 입력후에 배민 개인정보 동의하기에서 동의하기 체크하고 동의하기 누르면 다시 배민 로그인페이지 처음으로 돌아갑니다 번정도 그렇게되었네요 뭐 어쩌라는건지"                                                                                                                                                                                                                                                                                               
## [18] "일단 가입하려고하는데 거기서부터 막히네요 보통 핸드폰인증할때 메세지가 일분안팎으론 다 오곤하는데 이건 뭐 오류인지 뭔지 분을 기다려도안오네요 메세지발송후 분안에 입력해야되는데 입력을 못합니다 화나서 어플못씁니다"                                                                                                                                                                                                                                                                                                                                        
## [19] "어플 먹통이라 지우고 새로 깔았는데 업데이트를 하래요 근데 업데이트 버튼은 없고요 사진첨부가 되면 좋을텐데 어플 접속해서 장바구니에 음식 담고 주문하기 누르면 인터넷이 안된다면서 오류 나네요 결제를 못해요 결제창이 아예 안떠서요 어제부터 갑자기 이러는데 왜이런가요 인터넷은 아무런 문제가 없고요 제가 네이버아이디로 이용중인데 그래서 그런지 뭔지 답변 부탁드려요 답답하네요"                                                                                                                                                                            
## [20] "본인인증 잘못했는데 어디서 다시해요 있는 쿠폰은 못쓴다하고 다른계정은 중복이라 안되고 주류인증을 계정 정보랑 다르게했다고 아무것도 못하게 하네요 뭐하나 시켜먹기 힘드네"                                                                                                                                                                                                                                                                                                                                                                                     
## [21] "네이버 연동할 때 필수정보라는 말이 없길래 이메일 체크 해제했더니 이메일 제공을 해야한다며 이전페이지로 돌아감 그 후 다시 네이버 연동 누르면 계속 네이버 메일 제공하라는 메세지만 뜨고 정작 연동페이지가 안 떠서 제공 동의을 하고 싶어도 못하게 되어있음"                                                                                                                                                                                                                                                                                                     
## [22] "방금 처음 가입해서 친구한테 추천코드 받아서 그거 입력하고 본인인증까지 했는데 신규 천원 할인권이 지급되지 않았습니다 어떻게 된거죠 아무리 봐도 지급이 안됐는데 다시 그 친구의 추천코드를 입력하니까 안된다고 하고 이게 어떻게 된거죠"                                                                                                                                                                                                                                                                                                                        
## [23] "어플 충동 오류 업데이트 이후 버벅현상 충동 현상 앱강제 종료 현상 이 되고 있습니다 앱 실행시 핸드폰에 느림현상 이 있고 멈춤 현상이 있습니다 이때문에 결제도중 오류 발생하여 주문취소를 몇번이고했습니다 충돌 일어나지않게 좀 만들어주세요"                                                                                                                                                                                                                                                                                                                    
## [24] "그 머시냐 제가 본인인증을 하는데 인증번호를 받고 확인 눌렀단 말이에요 그런데 안돼요 제가 전화번호를 맞게 했고 다시 앱을 깔고 해도 안되고 나갔다 들어와도 안돼는데 이거 어떻게 해야되나요 배민에서 문제가 있는건가요 만약 이게 배민쪽에서 문제가 있는거라면 빨리빨리 고쳐주시길 바랍니다"                                                                                                                                                                                                                                                                     
## [25] "자꾸 계정정보 일치안한다고 로그인이 안됩니다 아이디 비번 확인햇고 시간째 이러고있어요 네이버계정으로 폰바꿔서 지급 로그인중인데 평생 안되나보네여 삭제후 재설치도 햇습니다 해결부탁드립니다"                                                                                                                                                                                                                                                                                                                                                                 
## [26] "배민 잘 사용하고 있습니다 제가 최근에 핸드폰을 변경해서 전에 쓰던 폰의 배민을 로그아웃하고 새 폰으로 로그인 하려고 했는데 네이버로 가입을 해서 로그인을 네이버 이메일로 하려고 했더니 안되길래 그냥 다시 또 네이버로 가입하기를 했습니다 그러면 회원이 계속 유지 될 줄 알고요 근데 새로운 유저로 인식하는데 제가 뭐 잘못한 건가요"                                                                                                                                                                                                                           
## [27] "로그인오류 네이버 페이스북 애플아이디 등 로그인 할 수 있는 방법을 늘려서 너무 좋아요 단 사용하는 폰이 삼성 이기에 애플은 로그인은 시도를 못 해봤지만 네이버 페이스북 둘다 시도 해본결과 둘다 안되네요 굳이 안되는 기능을 왜 만들었는지 잘 모르겠습니다 결국 네이버에 검색해서 전화 주문했네요"                                                                                                                                                                                                                                                               
## [28] "페이스북 로그인하는데 뭔 정보제공 어쩌구하면서 로그인이 안됨 처음 가입할땐 잘만 되더니 페이스북 설정보안이는 정보제공 동의 잘만 돼있는데 해결방법을 제대로 설명해주는것도 아니고 인터넷에 친다고 해결방법이 나오는것도 아님 결국 난 로그인 포기하고 앱삭제함"                                                                                                                                                                                                                                                                                                
## [29] "다른 분도 겪었던 여러가지 로그인 오류 문제를 저도 겪었고 고객센터에 문의했으나 도움이 되진 않았고 해결법을 제가 찾았습니다 네이버 앱을 깔고 앱을 로그인한 상태에서 배민 앱 네이버로그인을 실행하니 됐어요 이렇게라도 되서 다행"                                                                                                                                                                                                                                                                                                                              
## [30] "기존에는 현금영수증 신청해놓고 동일아이디로 사용하면 계속 동일번호신청으로 떴는데 이제는 미신청을 개인이 건마다 신청으로 바꿔놓아야 신청이 되게하네요 돌려놓으시죠"                                                                                                                                                                                                                                                                                                                                                                                          
## [31] "제 가입정보 자체가 날아갔는데 어떻게 된거죠 로그인해서 사용중이던 어플이 등록정보가 없대서 재로그인하려고 로그아웃했더니 로그인이 안되고 아이디 찾기를 했더니 아이디가 없다고 나오네요 무슨 상황이죠 저만 이래요"                                                                                                                                                                                                                                                                                                                                            
## [32] "임시비밀번호를 발급받아 로그인했는데도 계정정보와 일치하지않다고 로그인이 안되는데 이거 왜 그런건가요"                                                                                                                                                                                                                                                                                                                                                                                                                                                       
## [33] "다음부턴 앱에 문제가 있으면 팝업공지로 알려주시기 바랍니다 고객이 주문전에 맨날 공지사항 확인하는것도 아니고 평소처럼 주문결제 되는데 앱에 문제가 있는지 어떻게 압니까 주문하고 주문내역 없어서 이상하다는걸 알았네요 그리고 문제해결전까지 주문 다 막으셔야되는거 아닌가요 어차피 앱주문결제해도 주문 안들어가는데 왜 결제는 되게 해두신건지 주문막는기능은 업주만 설정권한있나요 아니면 돈 묶어두시는건가요 저번이벤땐 문제없었던거같은데 이번엔 왜이러는지"                                                                                               
## [34] "아니 진짜 어이없어서 배달 시키고 카드 결제하려고 해서 로그인 하려고 아이디 찾기 했는데 없는 정보라고 하길래 회원가입하려 했더니 이미 있는 번호로 못 만든다고 하면 어떻게 하라는건가요 그냥 이 앱을 쓰지말라는건가"                                                                                                                                                                                                                                                                                                                                           
## [35] "비밀번호바꾸고 완료누르니 정보를다시 확인하라는 안내만뜨고 뭐가틀렸는지를 안알려줘서 한참을 헤맷네요 적어도 비밀번호 규칙이 뭔지는 알려줘야하지 않나요"                                                                                                                                                                                                                                                                                                                                                                                                      
## [36] "배민이 장사 그만하고싶나봐요 티비에서도 상인 수수료 때문에 문제 많던데 회원가입전 첫배달 원 할인으로 나오고 친구소개는 천원으로 나오다가 회원가입하니까 첫 배달 천원 친구소개 천원으로 숫자 가지고 장난을 치네 배달 앱하나 만들어 돈장난 치고 스마트시대에 맞는 공익 디지털 전화번호부 만들어서 소상공인도 주문자도 사실상 수수료 무료인 앱을 나라에서는 개발 했어야 했다 늦지 않았다 공익사업으로 디지털 전화번호부에 판매상품 모두 실어줘라 개발자는 건당 먹어야지 수수료 처먹겠다고 나라를 팔아먹었다 밥 전체 리뷰"                                       
## [37] "다좋은데 왜 처음화면에서 접속이 안되는건지 모르겠네요 지웠다가 다시 설치도해보고 했는데 똑같이 접속이 안돼요 혹시 이유가 있을까요 계속 쓸때마다 지웟다 깔 수도 없고 해결방법좀 알려주세요 참고로 인터넷연결과는 무관하다고 생각합니다 다른앱이나 인터넷은 원할하게 접속됩니다 데이터 또한 마찬가지이구요 저뿐만 아니라 이런분들이 더 있는것 같은데 어떻게 조치되었는지요"                                                                                                                                                                                    
## [38] "배달 앱 중에서 제일 편하고 정직하게 운영되는 것 같아 자주 시켜먹습니다 근데 한 가지 아쉬운 점이 있다면 리뷰를 달지 않은 채로 모바일작업을 하고 있으면 배너가 작업창을 가려버립니다 이런 식으로 앱이 광고를 싸지르면 제 입장에서는 작업에 지장이 갈 수 밖에 없고요 애초에 리뷰는 사장님께 개선점이나 좋았던 점을 기재하는 건데 항상 그런 것들이 생겨날 수는 없는 것입니다 그렇기 때문에 리뷰요청 메시지를 화면을 점유하는 메시지가 아닌 카톡이나 휴대폰 메시지와 같은 상단 알림으로 변경해주었으면 합니다 앱이 화면을 점유해버 전체 리뷰"                     
## [39] "제 번호로 가입하지도 않았는데 계속 가입됐다고 하네요 그래서 번호로 아이디찾기를 해보니깐 제 번호로 가입되지 않았다는데 이거 좀 어떻게 해주세요"                                                                                                                                                                                                                                                                                                                                                                                                              
## [40] "핸드폰 인증오류 짜증나네요 인증번호 재수신을 번 했는데도 안옴 월 일 저녁 시 분"                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
## [41] "현금영수증 신청이 미신청으로 체크되있어서 불편해요 신경안쓰고 주문하면 현금영수증 안되는데 다시 해주는것도 아니고 일부로 영수증 못하게하려고 그러는건지 개선좀 해주세요"                                                                                                                                                                                                                                                                                                                                                                                     
## [42] "첫주문 인증 번이나 했는데 계속 인증하라고 하고 쿠폰도 안받아지네요 첫주문 할인은 개뿔 쿠폰도 안받아지고 인증도 무한번 해야되네요 제 소중한 시간을 인증하느라 낭비했어요 이 앱 쓰레기같아요 쓰지마세요"                                                                                                                                                                                                                                                                                                                                                       
## [43] "현금영수증신청에 체크하고 쿠폰적용하면 현긍영수증 신청이 해제되네요 여태까지 신청한거 다 부질없었구나 쿠폰적용 팝업때문에 해제되는거면 그걸 위에다가 배치해주시든가 신나게 돈써가며 바보인증해버렸넼 최소한 쿠폰팝업창때문에 현금영수증신청체크란이 초기화된다고 적어놓기라도 하세요 진짜 호구된기분임"                                                                                                                                                                                                                                                      
## [44] "언론에 노출된 이미지가좋아서 계속쓰고있는데 사용도에 비해서 혜택은 크지않구요 요즘들어 장바구니에 다른매장정보로 올라오거나 결제정보가 이상하거나 결제가 한번에 안되는 경우가 발생합니다 결제 이상하면 심히 불안합니다 어쩌다가 발생한경우라 다음에 또 발생하면 캡쳐해서 올리겠지만 에러가생길까 걱정한적 없이 사용했었는데 살짝 불안해지고 있네요 인지도가 올라갈수록 사용도가 높아질수록 긴장하시고 잘 관리해주시기 바랍니다"                                                                                                                              
## [45] "결제창 무한로딩 해결 못하나요 앱 재설치 업데이트 이후에도 계속 이러네요 일주일 넘게"                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
## [46] "결제하면 연결 상태가 일시적으로 불안정합니다 다시 시도해주세요 라고 분째 계속 이러고 그후 겨우 결제에 성공했는데 카드사에서 결제 성공 나왔는데도 주문 내역에는 없고 서버를 도대체 어떻게 개발한건지 서버는 죽을 수 있지만 처리에 관한 트랜잭션 무결성이 안되는 현상은 진짜 납득이 안감 제발 실력있는 개발자 뽑아서 개발하세요 신생회사도 아니고 업력이 년 이상인데 아직도 이러면 님 최신기술 쓴다고 자랑말고 기본에 충실하세요 저도 게임 개발자지만 알파나 베타 상용서비스 초기면 이해가지만 전체 리뷰"                                                      
## [47] "아니 무슨 저번에도 그러드만 폰 결제를 하는데 인증 문자 보내고 인증 번호가 기다리는 시간 지나고 오는 게 말이가 몇초 남기고 걍 취소 했는데 몇분 지나서 인증 문자 오는거 아이없네"                                                                                                                                                                                                                                                                                                                                                                              
## [48] "결제할때 본인인증이 계속 안되네요 정확히 했는데 인증번호가 계속 안와요"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
## [49] "결제화면으로만 넘어가면 화면이 로딩중만 번째 상태가 좋지않다며 제것만 그렇겠죠 왜 배민만그럴까요 저 좀 결제 하게 해주세요"                                                                                                                                                                                                                                                                                                                                                                                                                                   
## [50] "엄청 까진 아니고 좋아요 그런데 카드결제나 만나서 카드결제시 배달비도 카드로 결제가 가능하면좋겠어요 현금을 안쓰다보니 현금확인을 하지않고 시켯는데 배달비가 부과되면 이러지도 저러지도 못하는 상황이오니까요"

=> 일곱번째 토픽은 ‘어플리케이션 오류’ 이다.

로그인, 카드 등록, 결제 등 유저가 어플리케이션을 설치한 후 주문 접수하기까지에서 발생하는 어플리케이션 오류 상황에 대한 내용이다.

앞서 언급한 것과 같이 주로 인증 오류의 형태가 많은 것으로 파악된다.

다섯번째 토픽이 특정한 일자에 집중적으로 발생했던 오류라면, 여섯번째 토픽은 유저 개인에게 있어 항시 발생할 수 있는 오류에 대한 내용이다.

또한 여러 가지 오류와 더불어 서비스 업체 (배달의 민족 고객센터)의 대응과 관련된 토픽이다.

2019년 한 해 동안 소비자고발센터에 제기된 배달 애플리케이션 배달의 민족, 요기요, 배달통에 대한 소비자 민원을 집계한 결과 가장 많은 민원을 차지한 것은 시스템 오류(36.6%)와 관련된 것이었다.

서비스 오류와 관련하여 소비자 고발센터에 가장 많은 민원이 제기되었다는 점에서 서비스의 오류는 단순히 이용률 감소로 이어지는 것이 아니라, 애플리케이션 자체에 대한 불신과 이탈로 이어질 수 있음을 보여주고 있다

각 토픽에 대해 파악했다면 알맞은 이름을 붙여준다.
# 토픽 이름 목록 만들기
name_topic <- tibble(topic = 1:7,
                     name = c("1. 기본적인 배달 서비스 \n개선 필요",
                              "2. 수수료 정책은 \n불매 운동을 불러와",
                              "3. 배달시장 독식은 \n고객 이탈을 불러와",
                              "4. 작성 오류 없고 믿을만한 \n리뷰 작성이 진행되어야",
                              "5. 주문 접수부터 취소까지, \n음식점 자체 서비스 개선 필요",
                              "6. 이벤트를 열어도 안드로이드 기기에서만  \n주문 오류 발생?!",
                              "7. 로그인부터 결제까지, \n다양한 APP 사용 오류 속 대응도 엉망"))


# 토픽 이름 결합하기
top_term_topic_name <- top10_term_topic %>%
  left_join(name_topic,  by = "topic")
top_term_topic_name
## # A tibble: 70 x 4
##    topic term      beta name                                 
##    <int> <chr>    <dbl> <chr>                                
##  1     1 배달   0.177   "1. 기본적인 배달 서비스 \n개선 필요"
##  2     1 이용   0.0416  "1. 기본적인 배달 서비스 \n개선 필요"
##  3     1 이상   0.0148  "1. 기본적인 배달 서비스 \n개선 필요"
##  4     1 라이더 0.0133  "1. 기본적인 배달 서비스 \n개선 필요"
##  5     1 주소   0.0126  "1. 기본적인 배달 서비스 \n개선 필요"
##  6     1 업체   0.0126  "1. 기본적인 배달 서비스 \n개선 필요"
##  7     1 지역   0.0107  "1. 기본적인 배달 서비스 \n개선 필요"
##  8     1 가능   0.00979 "1. 기본적인 배달 서비스 \n개선 필요"
##  9     1 수정   0.00916 "1. 기본적인 배달 서비스 \n개선 필요"
## 10     1 소비자 0.00916 "1. 기본적인 배달 서비스 \n개선 필요"
## # ... with 60 more rows
# 막대 그래프 만들기
ggplot(top_term_topic_name,
       aes(x = reorder_within(term, beta, name),
           y = beta,
           fill = factor(topic))) +
  geom_col(show.legend = F) +
  facet_wrap(~ name, scales = "free", ncol = 3) +
  coord_flip() +
  scale_x_reordered() +
  labs(title = "배달의 민족 고객 리뷰 토픽",
       subtitle = "토픽별 주요 단어 TOP 10",
       x = NULL, y = NULL) +
  theme_minimal() +
  theme(text = element_text(size=20),
        plot.title = element_text(size = 30, face = "bold"),
        plot.subtitle = element_text(size = 25),
        axis.text.x = element_blank(),   # x축 이름 삭제
        axis.ticks.x = element_blank())  # x축 눈금 삭제

=> 이렇게 토픽 모델링은 종료된다.

10. 전체적으로 배달의 민족의 리뷰에 대한 텍스트마이닝을 통해 제시하고자 하는 시사점을 설명하시오. (10)

각 토픽별 시사점은 9번 항목에서 이미 세세하게 정의하였다.

=> 이번 ‘배달의 민족 - 텍스트 마이닝’ 프로젝트는 빅데이터 시대에 걸맞는 분석 방법이라 할 수 있다.

소비자의 행태를 파악하기 위하여 사용자 리뷰라는 비정형 텍스트 데이터를 분석하고 그 결과에서 통찰을 찾아낸 것이다.

즉, 해당 연구는 과거 조사방법론 중심의 전자상거래 관련 연구와 차별화된다. 인위적이고 조작되지 않은 (여기서 말하는 조작은 조작화 과정을 뜻한다.) 상황에서 가공되지 않은 실제적 데이터를 분석하는 과정에서 보다 고객의 솔직한 답변을 기대할 수 있으며 분석의 근간의 되는 데이터 수집 역시 빠르게 진행할 수 있는 것이다.

=> 또한 사용자 리뷰 데이터를 바탕으로 LDA 토픽모델링, 감성 분석을 활용한 고객 리뷰 분석을 통해 각 토픽 (문제상황별) 이슈 대응 프로세스를 정립하였다. (9번 각 토픽 항목에 기재함)

=> 추가로 이번 프로젝트에서는 리뷰가 작성 날짜에 대해서는 분석하지 않았지만 현재 원문에 주어진 것처럼 리뷰 작성 일자 및 시간을 포함하여 시계열 분석을 진행한다면 보다 좋은 분석 결과를 얻을 수 있다.

예를 들어 설명해보도록 하겠다.
# 간단한 시계열 분석을 통해 토픽별 리뷰가 등록된 날짜와 등록된 리뷰수를 파악해줌

ts_topic<-baemin_topic %>% 
  group_by(날짜) %>% 
  count(topic) %>% 
  arrange(-n)

ggplot(ts_topic, aes(x=날짜, y=n, colour=factor(topic)))+
  geom_line(size=1.0) +
  ggtitle("토픽별 리뷰 등록 날짜") +
  labs(x = "등록 날짜", y = "등록 리뷰수 (n)")+
  theme(plot.title=element_text(size=25))

=> 해당 그래프는 토픽별 리뷰 등록 날짜와 해당 날짜에 등록된 리뷰수에 관한 그래프이다.

이 그래프에서 나타나듯이 토픽별로 매우 상이한 결과가 나오는 것이 확인된다.

따라서, 날짜별 어떤 토픽의 리뷰들이 작성되었는지, 특정한 토픽의 리뷰가 집중되서 등록되었는지 아닌지, 작성된 리뷰의 수와 토픽 내 리뷰의 감정 분석 진행시 어떤 결과를 도출해낼 수 있는지 등을 파악한다면 특정 서비스 이슈에 대해 빠르게 감지, 대응가능한 정책 혹은 MIS (자동화된 형태) 를 구축할 수 있을 것으로 판단된다.